<li id="8g3ty"><tbody id="8g3ty"><th id="8g3ty"></th></tbody></li>
    <label id="8g3ty"><samp id="8g3ty"></samp></label>
  • <span id="8g3ty"></span>

    1. <center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
    2. <bdo id="8g3ty"><meter id="8g3ty"><bdo id="8g3ty"></bdo></meter></bdo><center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
      <label id="8g3ty"><samp id="8g3ty"></samp></label>

    3. 電子開發(fā)網(wǎng)

      電子開發(fā)網(wǎng)電子設(shè)計(jì) | 電子開發(fā)網(wǎng)Rss 2.0 會(huì)員中心 會(huì)員注冊(cè)
      搜索: 您現(xiàn)在的位置: 電子開發(fā)網(wǎng) >> 編程學(xué)習(xí) >> 數(shù)據(jù)庫(kù)語(yǔ)言 >> 正文

      數(shù)據(jù)庫(kù)知識(shí)點(diǎn)匯總(最全!!)_數(shù)據(jù)庫(kù)知識(shí)點(diǎn)總結(jié)歸納

      作者:佚名    文章來(lái)源:網(wǎng)絡(luò)整理    點(diǎn)擊數(shù):    更新時(shí)間:2024/8/31

      數(shù)據(jù)庫(kù)的概念
      DB
      數(shù)據(jù)庫(kù)(database):存儲(chǔ)數(shù)據(jù)的“倉(cāng)庫(kù)”。它保存了一系列有組織的數(shù)據(jù)。
      DBMS
      數(shù)據(jù)庫(kù)管理系統(tǒng)(Database Management System)。數(shù)據(jù)庫(kù)是通過(guò)DBMS創(chuàng)建和操作的容器,常見的數(shù)據(jù)庫(kù)管理系統(tǒng):MySQL、Oracle、DB2、SqlServer等
      SQL
      結(jié)構(gòu)化查詢語(yǔ)言(Structure Query Language):專門用來(lái)與數(shù)據(jù)庫(kù)通信的語(yǔ)言。
      二、SQL語(yǔ)言概述
      SQL的優(yōu)點(diǎn):
      1、不是某個(gè)特定數(shù)據(jù)庫(kù)供應(yīng)商專有的語(yǔ)言,幾乎所有DBMS都支持SQL
      2、簡(jiǎn)單易學(xué)
      3、雖然簡(jiǎn)單,但實(shí)際上是一種強(qiáng)有力的語(yǔ)言,靈活使用其語(yǔ)言元素,可以進(jìn)行非常復(fù)雜和高級(jí)的數(shù)據(jù)庫(kù)操作。
      三、數(shù)據(jù)庫(kù)的特點(diǎn)
      將數(shù)據(jù)放到表中,表再放到庫(kù)中
      一個(gè)數(shù)據(jù)庫(kù)中可以有多個(gè)表,每個(gè)表都有一個(gè)的名字,用來(lái)標(biāo)識(shí)自己。表名具有唯一性。
      表具有一些特性,這些特性定義了數(shù)據(jù)在表中如何存儲(chǔ),類似java中 “類”的設(shè)計(jì)。
      表由列組成,我們也稱為字段。所有表都是由一個(gè)或多個(gè)列組成的,每一列類似java 中的”屬性”
      表中的數(shù)據(jù)是按行存儲(chǔ)的,每一行類似于java中的“對(duì)象”。
      四、SQL語(yǔ)言分類
      1、DML(Data Manipulation Language):數(shù)據(jù)操縱語(yǔ)句,用于添加、刪除、修改、查詢數(shù)據(jù)庫(kù)記錄,并檢查數(shù)據(jù)完整性
      2、DDL(Data Definition Language):數(shù)據(jù)定義語(yǔ)句,用于庫(kù)和表的創(chuàng)建、修改、刪除。
      3、DCL(Data Control Language):數(shù)據(jù)控制語(yǔ)句,用于定義用戶的訪問(wèn)權(quán)限和安全級(jí)別。
      DML
      DML用于查詢與修改數(shù)據(jù)記錄,包括如下SQL語(yǔ)句:
      INSERT:添加數(shù)據(jù)到數(shù)據(jù)庫(kù)中
      UPDATE:修改數(shù)據(jù)庫(kù)中的數(shù)據(jù)
      DELETE:刪除數(shù)據(jù)庫(kù)中的數(shù)據(jù)
      SELECT:選擇(查詢)數(shù)據(jù)
      SELECT是SQL語(yǔ)言的基礎(chǔ),最為重要。
      DDL
      DDL用于定義數(shù)據(jù)庫(kù)的結(jié)構(gòu),比如創(chuàng)建、修改或刪除數(shù)據(jù)庫(kù)對(duì)象,包括如下SQL語(yǔ)句:
      CREATE TABLE:創(chuàng)建數(shù)據(jù)庫(kù)表
      ALTER TABLE:更改表結(jié)構(gòu)、添加、刪除、修改列長(zhǎng)度
      DROP TABLE:刪除表
      CREATE INDEX:在表上建立索引
      DROP INDEX:刪除索引
      DCL
      DCL用來(lái)控制數(shù)據(jù)庫(kù)的訪問(wèn),包括如下SQL語(yǔ)句:
      GRANT:授予訪問(wèn)權(quán)限
      REVOKE:撤銷訪問(wèn)權(quán)限
      COMMIT:提交事務(wù)處理
      ROLLBACK:事務(wù)處理回退
      SAVEPOINT:設(shè)置保存點(diǎn)
      LOCK:對(duì)數(shù)據(jù)庫(kù)的特定部分進(jìn)行鎖定
      五、mysql數(shù)據(jù)庫(kù)的安裝
      圖解MySQL程序結(jié)構(gòu)

      MySQL產(chǎn)品的特點(diǎn)
      MySQL數(shù)據(jù)庫(kù)隸屬于MySQL AB公司,總部位于瑞典,后被oracle收購(gòu)。
      – 成本低:開放源代碼,一般可以免費(fèi)試用
      – 性能高:執(zhí)行很快
      – 簡(jiǎn)單:很容易安裝和使用
      配置文件常用配置分析(重點(diǎn))
      安裝目錄下的my.ini文件
      [mysqld] 服務(wù)端配置
      port=3306 端口3306
      basedir 是安裝目錄
      datadir 數(shù)據(jù)文件目錄
      character-set-server 服務(wù)端字符編碼
      default-storage-engine 默認(rèn)引擎
      sql-mode 語(yǔ)法模式
      max_connections 最大連接數(shù)
      啟動(dòng)和停止MySQL服務(wù)
      方式一:通過(guò)計(jì)算機(jī)管理方式
      右擊計(jì)算機(jī)—管理—服務(wù)—啟動(dòng)或停止MySQL服務(wù)
      方式二:通過(guò)命令行方式(右鍵管理員運(yùn)行,否則沒(méi)有權(quán)限)
      啟動(dòng):net start 服務(wù)名
      停止:net stop 服務(wù)名
      MySQL服務(wù)端的登錄和退出
      通過(guò)mysql自帶客戶端

      通過(guò)window是命令行登錄
      mysql –h 主機(jī)名 –u用戶名 –p 密碼
      mysql -h localhost -u root -p
      輸入密碼:
      退出
      exit
      六、MySql數(shù)據(jù)庫(kù)的使用
      規(guī)范
      不區(qū)分大小寫
      每句話用;或\g結(jié)尾
      各子句一般分行寫
      關(guān)鍵字不能縮寫也不能分行
      用縮進(jìn)提高語(yǔ)句的可讀性
      注釋
      單行注釋 # 或 –
      多行注釋 /* 注釋文本 */

      示例

      1. 進(jìn)入 mysql, 在命令行中輸入: mysql –u root –p
      2. 查看 mysql 中有哪些個(gè)數(shù)據(jù)庫(kù): show databases;
      3. 使用一個(gè)數(shù)據(jù)庫(kù): use 數(shù)據(jù)庫(kù)名稱;
      4. 新建一個(gè)數(shù)據(jù)庫(kù): create database 數(shù)據(jù)庫(kù)名
      5. 查看指定的數(shù)據(jù)庫(kù)中有哪些數(shù)據(jù)表: show tables;
        6.查看mysql版本
        登錄后select version();
        或退出重新登錄
        未登錄 mysql --version或mysql –V

      1.SHOW DATABASES;
      2.USE employee;
      3.SHOW TABLES ;
      4.DESC dept;
      七、圖形化界面客戶端的使用

      導(dǎo)入sql文件
      四張表的介紹

      八、基本 SELECT 語(yǔ)句
      SELECT *|{[DISTINCT] column|expression [alias],…}
      FROM table;
      • SELECT 標(biāo)識(shí)選擇哪些列。
      • FROM 標(biāo)識(shí)從哪個(gè)表中選擇。
      SELECT *
      FROM departments;
      選擇特定的列
      SELECT department_id, location_id
      FROM departments;

      注意
      • SQL 語(yǔ)言大小寫不敏感。
      • SQL 可以寫在一行或者多行
      • 關(guān)鍵字不能被縮寫也不能分行
      • 各子句一般要分行寫。
      • 使用縮進(jìn)提高語(yǔ)句的可讀性
      列的別名
      • 重命名一個(gè)列。
      • 便于計(jì)算。
      • 緊跟列名,也可以在列名和別名之間加入關(guān)鍵字‘AS’,別名使用雙引號(hào),以便在別名中包含空格或特殊的字符并區(qū)分大小寫。
      SELECT last_name AS name, commission_pct comm
      FROM employees;
      SELECT last_name “Name”, salary*12 “Annual Salary”
      FROM employees;

      字符串
      • 字符串可以是 SELECT 列表中的一個(gè)字符,數(shù)字,日期。
      • 日期和字符只能在單引號(hào)中出現(xiàn)。?
      顯示表結(jié)構(gòu)
      使用 DESCRIBE 命令,表示表結(jié)構(gòu)
      DESC[RIBE] tablename
      DESCRIBE employees
      九、過(guò)濾和排序數(shù)據(jù)
      過(guò)濾
      使用WHERE 子句,將不滿足條件的行過(guò)濾掉
      SELECT
      *|{[DISTINCT] column|expression [alias],…}
      FROM table
      [WHERE condition(s)];
      WHERE 子句緊隨 FROM 子句

      返回在 90號(hào)部門工作的所有員工的信息
      SELECT employee_id, last_name, job_id, department_id
      FROM employees
      WHERE department_id = 90 ;
      比較運(yùn)算
      賦值使用 := 符號(hào)

      SELECT last_name, salary
      FROM employees
      WHERE salary <= 3000;
      其它比較運(yùn)算(重點(diǎn)聽一下LIKE)

      BETWEEN
      使用 BETWEEN 運(yùn)算來(lái)顯示在一個(gè)區(qū)間內(nèi)的值
      SELECT last_name, salary
      FROM employees
      WHERE salary BETWEEN 2500 AND 3500;
      IN
      使用 IN運(yùn)算顯示列表中的值。
      SELECT employee_id, last_name, salary, manager_id
      FROM employees
      WHERE manager_id IN (100, 101, 201);
      LIKE
      •使用 LIKE 運(yùn)算選擇類似的值
      •選擇條件可以包含字符或數(shù)字:
      % 代表零個(gè)或多個(gè)字符(任意個(gè)字符)。
      _ 代表一個(gè)字符。
      SELECT first_name
      FROM employees
      WHERE first_name LIKE ‘S%’;

      ‘%’和‘-’可以同時(shí)使用
      SELECT last_name
      FROM employees
      WHERE last_name LIKE ‘_o%’; //最后的名字字母為o
      NULL
      使用 IS (NOT) NULL 判斷空值
      SELECT last_name, manager_id
      FROM employees
      WHERE manager_id IS NULL;
      邏輯運(yùn)算

      AND
      AND 要求并的關(guān)系為真

      SELECT employee_id, last_name, job_id, salary
      FROM employees
      WHERE salary >=10000
      AND job_id LIKE ‘%MAN%’;
      OR
      OR 要求或關(guān)系為真。
      SELECT employee_id, last_name, job_id, salary
      FROM employees
      WHERE salary >= 10000
      OR job_id LIKE ‘%MAN%’;
      NOT
      SELECT last_name, job_id
      FROM employees
      WHERE job_id
      NOT IN (‘IT_PROG’, ‘ST_CLERK’, ‘SA_REP’);
      ORDER BY子句
      使用 ORDER BY 子句排序
      ASC(ascend): 升序
      DESC(descend): 降序
      ORDER BY 子句在SELECT語(yǔ)句的結(jié)尾。
      SELECT last_name, job_id, department_id, hire_date
      FROM employees
      ORDER BY hire_date ;
      降序排序
      SELECT last_name, job_id, department_id, hire_date
      FROM employees
      ORDER BY hire_date DESC ;
      按別名排序
      SELECT employee_id, last_name, salary*12 annsal
      FROM employees
      ORDER BY annsal;
      多個(gè)列排序
      按照ORDER BY 列表的順序排序
      SELECT last_name, department_id, salary
      FROM employees
      ORDER BY department_id, salary DESC;
      可以使用不在SELECT 列表中的列排序
      十、分組函數(shù)
      什么是分組函數(shù)
      分組函數(shù)作用于一組數(shù)據(jù),并對(duì)一組數(shù)據(jù)返回一個(gè)值。
      組函數(shù)類型

      • AVG()
      • COUNT()
      • MAX()
      • MIN()
      • SUM()
      組函數(shù)語(yǔ)法
      SELECT [column,] group_function(column), …
      FROM table
      [WHERE condition]
      [GROUP BY column]
      [ORDER BY column];
      AVG(平均值)和 SUM (合計(jì))函數(shù)
      可以對(duì)數(shù)值型數(shù)據(jù)使用AVG 和 SUM 函數(shù)。
      SELECT AVG(salary), MAX(salary),
      MIN(salary), SUM(salary)
      FROM employees
      WHERE job_id LIKE ‘%REP%’;
      MIN(最小值)和 MAX(最大值)函數(shù)
      可以對(duì)任意數(shù)據(jù)類型的數(shù)據(jù)使用 MIN 和 MAX 函數(shù)。
      SELECT MIN(hire_date), MAX(hire_date)
      FROM employees;
      COUNT(計(jì)數(shù))函數(shù)
      COUNT() 返回表中記錄總數(shù),適用于任意數(shù)據(jù)類型。
      SELECT COUNT(
      )
      FROM
      employees
      WHERE department_id = 50;

      COUNT(expr) 返回expr不為空的記錄總數(shù)
      SELECT COUNT(commission_pct)
      FROM employees
      WHERE department_id = 50;
      分組數(shù)據(jù)
      分組數(shù)據(jù): GROUP BY 子句語(yǔ)法
      可以使用GROUP BY子句將表中的數(shù)據(jù)分成若干組
      SELECT column, group_function(column)
      FROM table
      [WHERE condition]
      [GROUP BY group_by_expression]
      [ORDER BY column];
      GROUP BY 子句 (?)
      在SELECT 列表中所有未包含在組函數(shù)中的列都應(yīng)該包含在 GROUP BY 子句中
      SELECT department_id, AVG(salary)
      FROM employees
      GROUP BY department_id ;
      包含在 GROUP BY 子句中的列不必包含在SELECT 列表中
      SELECT AVG(salary)
      FROM employees
      GROUP BY department_id ;
      使用多個(gè)列分組
      SELECT department_id dept_id, job_id, SUM(salary)
      FROM employees
      GROUP BY department_id, job_id ;
      非法使用組函數(shù)
      • 不能在 WHERE 子句中使用組函數(shù)。
      • 可以在 HAVING 子句中使用組函數(shù)
      SELECT department_id, AVG(salary)
      FROM employees
      WHERE AVG(salary) > 8000
      GROUP BY department_id;

      WHERE 子句中不能使用組函數(shù)
      過(guò)濾分組
      使用 HAVING 過(guò)濾分組:

      1. 行已經(jīng)被分組。
      2. 使用了組函數(shù)。
      3. 滿足HAVING 子句中條件的分組將被顯示。
        SELECT column, group_function
        FROM table
        [WHERE condition]
        [GROUP BY group_by_expression]
        [HAVING group_condition]
        [ORDER BY column];

      HAVING 子句
      SELECT department_id, MAX(salary)
      FROM employees
      GROUP BY department_id
      HAVING MAX(salary)>10000 ;
      十一、多表查詢

      笛卡爾集

      select name,boyName from beauty,boys; 這條語(yǔ)句對(duì)嗎?
      為了避免笛卡爾集, 可以在 WHERE 加入有 效的連接條件

      Mysql 連接
      使用連接在多個(gè)表中查詢數(shù)據(jù)
      SELECT table1.column, table2.column
      FROM table1, table2
      WHERE table1.column1 = table2.column2;
      在 WHERE 子句中寫入連接條件。
      在表中有相同列時(shí),在列名之前加上表名前綴
      等值連接

      SELECT beauty.id,NAME,boyname FROM beauty ,boys
      WHERE beauty.boyfriend_id=boys.id;
      區(qū)分重復(fù)的列名
      • 使用表名前綴在多個(gè)表中區(qū)分相同的列。
      • 在不同表中具有相同列名的列可以用表的別名加以區(qū)分。
      • 如果使用了表別名,則在select語(yǔ)句中需要使用表別名代替表名
      • 表別名最多支持32個(gè)字符長(zhǎng)度,但建議越少越好
      表的別名
      • 使用別名可以簡(jiǎn)化查詢。
      • 使用表名前綴可以提高執(zhí)行效率。
      SELECT bt.id,NAME,boyname
      FROM beauty bt,boys b;
      WHERE bt.boyfriend_id=b.id ;
      Join連接
      • 分類:
      – 內(nèi)連接 [inner] join on
      – 外連接
      • 左外連接 left [outer] join on
      • 右外連接 right [outer] join on
      ON 子句
      SELECT bt.id,NAME,boyname
      FROM beauty bt
      Inner join boys b
      On bt.boyfriend_id=b.id ;
      連接多個(gè)表
      連接 n個(gè)表,至少需要 n-1個(gè)連接條件。
      例如:連接三個(gè)表,至少需要兩個(gè)連接條件。
      練習(xí):查詢出公司員工的 last_name, department_name, city
      使用 ON 子句創(chuàng)建多表連接(重點(diǎn))
      SELECT employee_id, city, department_name
      FROM employees e
      JOIN departments d
      ON d.department_id = e.department_id
      JOIN locations l
      ON d.location_id = l.location_id;
      John連接總結(jié)

      十二、字符函數(shù)

      大小寫控制函數(shù)
      這類函數(shù)改變字符的大小寫。
      LOWER(‘SQL Course’)
      sql course

      UPPER(‘SQL Course’)
      SQL COURSE

      字符控制函數(shù)
      CONCAT(‘Hello’, ‘World’)
      HelloWorld

      SUBSTR(‘HelloWorld’,1,5)
      Hello

      LENGTH(‘HelloWorld’)
      10

      INSTR(‘HelloWorld’, ‘W’)
      6

      LPAD(salary,10,’*’)
      *****24000

      RPAD(salary, 10, ‘*’)
      24000*****

      TRIM(‘H’ FROM ‘HelloWorld’)
      elloWorld

      REPLACE(‘a(chǎn)bcd’,‘b’,‘m’)
      amcd
      十三、數(shù)字函數(shù)
      ROUND: 四舍五入
      ROUND(45.926, 2) 45.93
      TRUNCATE: 截?cái)?BR>TRUNC(45.926, 2) 45.92
      MOD: 求余
      MOD(1600, 300) 100
      十四、日期函數(shù)
      now:獲取當(dāng)前日期
      str_to_date: 將日期格式的字符轉(zhuǎn)換成指定格式的日期
      STR_TO_DATE(‘9-13-1999’,’%m-%d-%Y’) 1999-09-13
      date_format:將日期轉(zhuǎn)換成字符
      str_to_date: 將日期格式的字符轉(zhuǎn)換成指定格式的日期 2018年06月06日

      十五、條件表達(dá)式
      • 在 SQL 語(yǔ)句中使用IF-THEN-ELSE 邏輯
      • 使用方法: – CASE 表達(dá)式
      CASE 表達(dá)式
      在需要使用 IF-THEN-ELSE 邏輯時(shí)
      CASE expr WHEN comparison_expr1 THEN return_expr1
      [WHEN comparison_expr2 THEN return_expr2
      WHEN comparison_exprn THEN return_exprn
      ELSE else_expr]
      END
      練習(xí):查詢部門號(hào)為 10, 20, 30 的員工信息, 若部門號(hào)為 10, 則打印其工資的 1.1 倍, 20 號(hào)部門, 則打印其工資的 1.2 倍, 30 號(hào)部門打印其工資的 1.3 倍數(shù)
      下面是使用case表達(dá)式的一個(gè)例子:
      SELECT department_id,salary,
      CASE department_id
      WHEN 10 THEN salary1.2
      WHEN 20 THEN salary
      1.3
      WHEN 30 THEN salary*1.5
      ELSE salary
      END 工資2
      FROM employees
      十六、數(shù)據(jù)操縱語(yǔ)言
      DML(Data Manipulation Language –數(shù)據(jù)操縱語(yǔ)言) 可以在下列條件下執(zhí)行: – 向表中插入數(shù)據(jù)
      – 修改現(xiàn)存數(shù)據(jù)
      – 刪除現(xiàn)存數(shù)據(jù)
      事務(wù)是由完成若干項(xiàng)工作的DML語(yǔ)句組成的
      十七、插入數(shù)據(jù)
      INSERT 語(yǔ)句語(yǔ)法
      使用 INSERT 語(yǔ)句向表中插入數(shù)據(jù)。
      INSERT INTO table [(column [, column…])]
      VALUES (value [, value…]);
      使用這種語(yǔ)法一次只能向表中插入一條數(shù)據(jù)
      插入數(shù)據(jù)
      為每一列添加一個(gè)新值。
      • 按列的默認(rèn)順序列出各個(gè)列的值。
      • 在 INSERT 子句中隨意列出列名和他們的值。
      • 字符和日期型數(shù)據(jù)應(yīng)包含在單引號(hào)中。
      INSERT INTO departments(department_id, department_name,
      manager_id, location_id)
      VALUES (70, ‘Public Relations’, 100, 1700);

      INSERT INTO
      employees(employee_id,last_name,email,hire_date,job_id)
      VALUES (300,’Tom’,’tom@126.com’,to_date(‘2012-3-
      21’,’yyyy-mm-dd’),’SA_RAP’);

      向表中插入空值
      隱式方式: 在列名表中省略該列的值
      INSERT INTO departments (department_id, department_name )
      VALUES (30, ‘Purchasing’);

      顯示方式: 在VALUES 子句中指定空值。
      INSERT INTO departments
      VALUES (100, ‘Finance’, NULL, NULL);
      插入指定的值
      NOW()函數(shù):記錄當(dāng)前系統(tǒng)的日期和時(shí)間
      INSERT INTO employees (employee_id, first_name, last_name, email, phone_number,hire_date, job_id, salary, commission_pct, manager_id,department_id)
      VALUES (113, ‘Louis’, ‘Popp’, ‘LPOPP’, ‘515.124.4567’, NOW(), ‘AC_ACCOUNT’, 6900, NULL, 205, 100);

      從其它表中拷貝數(shù)據(jù)
      在 INSERT 語(yǔ)句中加入子查詢
      INSERT INTO emp2
      SELECT *
      FROM employees
      WHERE department_id = 90;

      INSERT INTO sales_reps(id, name, salary, commission_pct)
      SELECT employee_id, last_name, salary, commission_pct
      FROM employees
      WHERE job_id LIKE ‘%REP%’;

      不必書寫 VALUES 子句。
      子查詢中的值列表應(yīng)與 INSERT 子句中的列名對(duì)應(yīng)
      十八、更新數(shù)據(jù)
      UPDATE 語(yǔ)句語(yǔ)法
      • 使用 UPDATE 語(yǔ)句更新數(shù)據(jù)
      UPDATE table
      SET column = value [, column = value, …]
      [WHERE condition];

      • 可以一次更新多條數(shù)據(jù)。
      • 如果需要回滾數(shù)據(jù),需要保證在DML前,進(jìn)行設(shè)置:SET AUTOCOMMIT = FALSE;
      • 使用 WHERE 子句指定需要更新的數(shù)據(jù)
      UPDATE employees
      SET department_id = 70
      WHERE employee_id = 113;
      • 如果省略 WHERE 子句,則表中的所有數(shù)據(jù)都將被更新
      UPDATE copy_emp
      SET department_id = 110;

      更新中的數(shù)據(jù)完整性錯(cuò)誤
      UPDATE employees
      SET department_id = 55
      WHERE department_id = 110;

      十九、刪除數(shù)據(jù)
      DELETE 語(yǔ)句
      使用 DELETE 語(yǔ)句從表中刪除數(shù)據(jù)。
      DELETE FROM table
      [WHERE condition];
      刪除數(shù)據(jù)
      使用 WHERE 子句刪除指定的記錄
      DELETE FROM departments
      WHERE department_name = ‘Finance’;
      如果省略 WHERE 子句,則表中的全部數(shù)據(jù)將被刪除
      DELETE FROM copy_emp;
      刪除中的數(shù)據(jù)完整性錯(cuò)誤
      DELETE FROM departments
      WHERE department_id = 60;

      二十、子查詢
      概念
      出現(xiàn)在其他語(yǔ)句內(nèi)部的select語(yǔ)句,稱為子查詢或內(nèi)查詢,內(nèi)部嵌套其他select語(yǔ)句的查詢,稱為外查詢或主查詢
      示例:
      select first_name from employees where
      department_id in(
      select department_id from departments
      where location_id=1700
      )
      注意事項(xiàng)
      • 子查詢要包含在括號(hào)內(nèi)。
      • 將子查詢放在比較條件的右側(cè)。
      • 單行操作符對(duì)應(yīng)單行子查詢,多行操作符對(duì)應(yīng)多行子查詢
      單行子查詢
      • 只返回一行。
      • 使用單行比較操作符。

      子查詢語(yǔ)法
      SELECT select_list
      FROM table
      WHERE expr operator
      (SELECT select_list
      FROM table);

      • 子查詢 (內(nèi)查詢) 在主查詢之前一次執(zhí)行完成。
      • 子查詢的結(jié)果被主查詢(外查詢)使用 。
      使用子查詢解決問(wèn)題
      誰(shuí)的工資比 Abel 高?

      執(zhí)行單行子查詢
      題目:返回job_id與141號(hào)員工相同,salary比143號(hào)員工多的員工姓名,job_id 和工資
      在子查詢中使用組函數(shù)
      題目:返回公司工資最少的員工的last_name,job_id和salary
      子查詢中的 HAVING 子句
      • 首先執(zhí)行子查詢。
      • 向主查詢中的HAVING 子句返回結(jié)果。
      題目:查詢最低工資大于50號(hào)部門最低工資的部門id和其最低工資
      非法使用子查詢

      子查詢中的空值問(wèn)題
      SELECT last_name, job_id
      FROM employees
      WHERE job_id =
      (SELECT job_id
      FROM employees
      WHERE last_name = ‘Haas’);
      子查詢不返回任何行
      多行子查詢
      • 返回多行。
      • 使用多行比較操作符

      使用in操作符
      題目:返回location_id是1400或1700的部門中的所有員工姓名
      在多行子查詢中使用 ANY 操作符
      題目:返回其它部門中比job_id為‘IT_PROG’部門任一工資低的員工的員
      工號(hào)、姓名、job_id 以及salary

      題目:返回其它部門中比job_id為‘IT_PROG’部門所有工資都低的員工
      的員工號(hào)、姓名、job_id 以及salary

      子查詢中的空值問(wèn)題

      二十一、創(chuàng)建數(shù)據(jù)庫(kù)
      創(chuàng)建一個(gè)保存員工信息的數(shù)據(jù)庫(kù)
      – create database employees;
      相關(guān)其他命令
      – show databases;查看當(dāng)前所有數(shù)據(jù)庫(kù)
      – use employees;“使用”一個(gè)數(shù)據(jù)庫(kù),使其作為當(dāng)前數(shù)據(jù)庫(kù)
      命名規(guī)則
      • 數(shù)據(jù)庫(kù)名不得超過(guò)30個(gè)字符,變量名限制為29個(gè) • 必須只能包含 A–Z, a–z, 0–9, _共63個(gè)字符
      • 不能在對(duì)象名的字符間留空格
      • 必須不能和用戶定義的其他對(duì)象重名
      • 必須保證你的字段沒(méi)有和保留字、數(shù)據(jù)庫(kù)系統(tǒng)或常用方法沖突
      • 保持字段名和類型的一致性,在命名字段并為其指定數(shù)據(jù)類型的時(shí)候一定要保證一致性。假如數(shù)據(jù)類型在一個(gè)表里是整數(shù),那在另一個(gè)表里可就別變成字符型了
      CREATE TABLE 語(yǔ)句
      • 必須具備:
      – CREATE TABLE權(quán)限
      – 存儲(chǔ)空間

      • 必須指定:
      – 表名
      – 列名, 數(shù)據(jù)類型, 尺寸
      語(yǔ)法

      確認(rèn)

      常用數(shù)據(jù)類型

      創(chuàng)建表
      CREATE TABLE emp (
      #int類型,自增
      emp_id INT AUTO_INCREMENT, #最多保存20個(gè)中英文字符
      emp_name CHAR (20),
      #總位數(shù)不超過(guò)15位
      salary DOUBLE,
      #日期類型
      birthday DATE,
      #主鍵
      PRIMARY KEY (emp_id)
      ) ;
      使用子查詢創(chuàng)建表
      • 使用 AS subquery 選項(xiàng),將創(chuàng)建表和插入數(shù)據(jù)結(jié)合起來(lái)(?)

      • 指定的列和子查詢中的列要一一對(duì)應(yīng)
      • 通過(guò)列名和默認(rèn)值定義列
      復(fù)制現(xiàn)有的表:
      create table emp1 as select * from employees;
      create table emp2 as select * from employees where 1=2;
      –創(chuàng)建的emp2是空表。
      使用子查詢創(chuàng)建表舉例

      二十二、ALTER TABLE 語(yǔ)句
      使用 ALTER TABLE 語(yǔ)句可以實(shí)現(xiàn):
      –向已有的表中添加列
      修改現(xiàn)有表中的列
      –刪除現(xiàn)有表中的列
      –重命名現(xiàn)有表中的列
      追加一個(gè)新列
      ALTER TABLE dept80
      ADD job_id varchar(15);
      修改一個(gè)列
      • 可以修改列的數(shù)據(jù)類型, 尺寸和默認(rèn)值
      • 對(duì)默認(rèn)值的修改只影響今后對(duì)表的修改
      ALTER TABLE dept80
      MODIFY (last_name VARCHAR(30));

      ALTER TABLE dept80
      MODIFY (salary double(9,2) default 1000);

      刪除一個(gè)列
      使用 DROP COLUMN 子句刪除不再需要的列.
      ALTER TABLE dept80
      DROP COLUMN job_id;
      重命名一個(gè)列
      使用 CHANGE old_column new_column dataType子句重命名列
      ALTER TABLE dept80
      CHANGE department_name dept_name varchar(15);
      二十三、刪除表
      • 數(shù)據(jù)和結(jié)構(gòu)都被刪除
      • 所有正在運(yùn)行的相關(guān)事務(wù)被提交
      • 所有相關(guān)索引被刪除
      • DROP TABLE 語(yǔ)句不能回滾
      DROP TABLE dept80;

      清空表
      • TRUNCATE TABLE 語(yǔ)句:
      – 刪除表中所有的數(shù)據(jù)
      – 釋放表的存儲(chǔ)空間
      • TRUNCATE語(yǔ)句不能回滾
      • 可以使用 DELETE 語(yǔ)句刪除數(shù)據(jù),可以回滾
      二十四、改變對(duì)象的名稱
      • 執(zhí)行RENAME語(yǔ)句改變表, 視圖的名稱
      • 必須是對(duì)象的擁有者
      ALTER table dept
      RENAME TO detail_dept;
      二十五、常見的數(shù)據(jù)類型
      整型

      小數(shù)

      位類型

      char和varchar類型
      字符串類型 最多字符數(shù) 描述及存儲(chǔ)需求
      說(shuō)明:用來(lái)保存MySQL中較短的字符串。

      binary和varbinary類型
      說(shuō)明:類似于char和varchar,不同的是它們包含二進(jìn)制字符串而不包含非二進(jìn)制字符串。
      Enum類型
      說(shuō)明:又稱為枚舉類型哦,要求插入的值必須屬于列表中指定的值之一。
      如果列表成員為1~255,則需要1個(gè)字節(jié)存儲(chǔ)
      如果列表成員為255~65535,則需要2個(gè)字節(jié)存儲(chǔ)
      最多需要65535個(gè)成員
      Set類型
      說(shuō)明:和Enum類型類似,里面可以保存0~64個(gè)成員。和Enum類型最大的區(qū)別是:SET類型一次可以選取多個(gè)成員,而Enum只能選一個(gè)根據(jù)成員個(gè)數(shù)不同,存儲(chǔ)所占的字節(jié)也不同

      日期類型

      datetime和timestamp的區(qū)別
      1、Timestamp支持的時(shí)間范圍較小,取值范圍:19700101080001——2038年的某個(gè)時(shí)間Datetime的取值范圍:1000-1-1 ——9999—12-31
      2、timestamp和實(shí)際時(shí)區(qū)有關(guān),更能反映實(shí)際的日期,而datetime則只能反映出插入時(shí)的當(dāng)?shù)貢r(shí)區(qū)
      3、timestamp的屬性受Mysql版本和SQLMode的影響很大
      二十六、約束
      什么是約束
      • 為了保證數(shù)據(jù)的一致性和完整性,SQL規(guī)范以約束的方式對(duì)表數(shù)據(jù)進(jìn)行額外的條件限制。
      • 約束是表級(jí)的強(qiáng)制規(guī)定
      • 可以在創(chuàng)建表時(shí)規(guī)定約束(通過(guò) CREATETABLE 語(yǔ)句),或者在表創(chuàng)建之后也可以(通
      過(guò) ALTER TABLE 語(yǔ)句)
      有以下六種約束:
      – NOT NULL 非空約束,規(guī)定某個(gè)字段不能為空
      – UNIQUE 唯一約束,規(guī)定某個(gè)字段在整個(gè)表中是唯一的
      – PRIMARY KEY 主鍵(非空且唯一) – FOREIGN KEY 外鍵
      – CHECK 檢查約束
      – DEFAULT 默認(rèn)值
      具體細(xì)節(jié)可以參閱W3Cschool手冊(cè)
      注意: MySQL不支持check約束,但可以使用check約束,而沒(méi)有任何效果;
      • 根據(jù)約束數(shù)據(jù)列的限制,約束可分為:
      – 單列約束:每個(gè)約束只約束一列
      – 多列約束:每個(gè)約束可約束多列數(shù)據(jù)
      • 根據(jù)約束的作用范圍,約束可分為:
      – 列級(jí)約束只能作用在一個(gè)列上,跟在列的定義后面
      – 表級(jí)約束可以作用在多個(gè)列上,不與列一起,而是單獨(dú)定義
      NOT NULL 約束
      非空約束用于確保當(dāng)前列的值不為空值,非空約束只能出現(xiàn)在表對(duì)象的列上。
      Null類型特征:
      所有的類型的值都可以是null,包括int、float等數(shù)據(jù)類型
      空字符串””不等于null,0也不等于null
      創(chuàng)建 not null 約束:
      CREATE TABLE emp(
      id INT(10) NOT NULL,
      NAME VARCHAR(20) NOT NULL DEFAULT ‘a(chǎn)bc’,
      sex CHAR NULL
      );
      增加 not null 約束
      ALTER TABLE emp
      MODIFY sex VARCHAR(30) NOT NULL;
      取消 not null 約束:
      ALTER TABLE emp
      MODIFY sex VARCHAR(30) NULL;

      取消 not null 約束,增加默認(rèn)值:
      ALTER TABLE emp
      MODIFY NAME VARCHAR(15) DEFAULT ‘a(chǎn)bc’ NULL;
      UNIQUE 約束
      • 同一個(gè)表可以有多個(gè)唯一約束,多個(gè)列組合的約束。在創(chuàng)建唯一約束的時(shí)候,如果不給唯一約束名稱,就默認(rèn)和列名相同。
      • MySQL會(huì)給唯一約束的列上默認(rèn)創(chuàng)建一個(gè)唯一索引
      • 唯一約束,允許出現(xiàn)多個(gè)空值:NULL。
      CREATE TABLE USER(
      id INT NOT NULL,
      NAME VARCHAR(25),
      PASSWORD VARCHAR(16),
      #使用表級(jí)約束語(yǔ)法
      CONSTRAINT uk_name_pwd UNIQUE(NAME,PASSWORD)
      );

      Tags:數(shù)據(jù)庫(kù),mysql,sql  
      責(zé)任編輯:admin
      請(qǐng)文明參與討論,禁止漫罵攻擊。 昵稱:注冊(cè)  登錄
      [ 查看全部 ] 網(wǎng)友評(píng)論
      關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁(yè)面
      下到頁(yè)底
      晶體管查詢
      主站蜘蛛池模板: 狠狠做深爱婷婷久久综合一区 | 亚洲明星合成图综合区在线| 噜噜综合亚洲AV中文无码| 色欲人妻综合AAAAA网| 色与欲影视天天看综合网| 亚洲a∨国产av综合av下载| 国产精品综合专区中文字幕免费播放| 国产精品综合久久第一页| 精品综合久久久久久97| 久久93精品国产91久久综合| 国产色婷婷五月精品综合在线| 婷婷国产天堂久久综合五月| 丁香五月缴情综合网| 久久―日本道色综合久久| 色噜噜狠狠色综合欧洲selulu| 久久综合给合久久狠狠狠97色| 色噜噜狠狠狠狠色综合久| 久久综合国产乱子伦精品免费| 综合激情区视频一区视频二区 | 狠狠做深爱婷婷综合一区| 亚洲综合校园春色| 人人狠狠综合久久亚洲88| 狠狠色综合TV久久久久久| 亚洲综合激情六月婷婷在线观看| 国产成人综合久久精品尤物| 色婷婷综合中文久久一本| 中文字幕亚洲综合小综合在线| 狠狠色丁香婷婷综合精品视频| 亚洲精品国产综合久久一线 | 国产综合无码一区二区色蜜蜜| 色欲色香天天天综合网站| 亚州欧州一本综合天堂网| 国产婷婷色综合AV蜜臀AV| 久久精品国产9久久综合| 丁香六月激情综合| 亚洲综合色在线观看亚洲| 久久久久噜噜噜亚洲熟女综合| 中文字幕久久综合| 久久综合九色综合97免费下载 | 久久亚洲欧洲国产综合| 国产综合色产在线精品|