mysql數據庫技術1——基本的增刪查改的sql語句

一、數據庫語言的分類

DDL:數據庫定義語言 data Definition language

用於建立、修改、和刪除數據庫內的數據結構,如:mysql

1:建立和刪除數據庫(CREATE DATABASE || DROP DATABASE);sql

2:建立、修改、重命名、刪除表(CREATE TABLE || ALTER TABLE|| RENAME TABLE||DROP TABLE,TRUNCATE TABLE);數據庫

3:建立和刪除索引(CREATEINDEX || DROP INDEX)安全

DML:數據操控語言 data Manipulation language

修改數據庫中的數據,包括插入(INSERT)、更新(UPDATE)和刪除(DELETE)服務器

DCL:數據控制語言 (管理用戶權限)data Control language

用於對數據庫的訪問,主要包括建立用戶、給用戶受權、對用戶撤銷受權、查詢用戶受權和刪除用戶等數據結構

,如:1.建立用戶(create user)2:給用戶授予訪問權限(GRANT);3:取消用戶訪問權限(REMOKE),4刪除用戶(drop user)。xss

DQL:數據查詢語言 data Query language

從數據庫中的一個或多個表中查詢數據(SELECT)函數

下面一一來介紹這四種類型的語言

二、DDL:數據庫定義語言 data Definition language

2.一、建立數據庫,而且以utf8的字符集建立

-- 若是不存在,則建立數據庫,而且以utf的字符集建立
CREATE DATABASE IF NOT EXISTS westos DEFAULT CHARACTER SET = 'utf8'

2.二、若是存在,刪除數據庫

-- 若是存在,則刪除數據庫
DROP DATABASE IF EXISTS westos

2.三、使用數據庫

-- 使用數據庫
USE westos

2.四、查看全部的數據庫

-- 查看全部的數據庫
SHOW DATABASES

2.五、查看全部的數據表

-- 查看全部的數據表
SHOW TABLES

2.六、建立表

-- 建立學生表,若是不存在
CREATE TABLE IF NOT EXISTS student (
    `id` INT NOT NULL AUTO_INCREMENT COMMENT '學生表id',
    `name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
    `pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密碼',
    `sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性別',
    `birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
    `address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
    `email` VARCHAR(50) DEFAULT NULL COMMENT '郵箱',
    PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET = 'utf8'

2.七、查看建立數據庫和數據表的語句

-- 查看建立數據庫的語句
SHOW CREATE DATABASE westos
-- 查看建立數據表的語句
SHOW CREATE TABLE student

2.八、查看錶的結構

-- 查看錶的具體結構
DESC student

三、DQL:數據查詢語言 data Query language

3.一、修改表名

-- 修改表名
ALTER TABLE student RENAME AS teacher

3.二、增長表的字段

-- 增長表的字段
ALTER TABLE teacher ADD age INT

3.三、修改表的字段

-- 修改表的字段(重命名,修改約束)
ALTER TABLE teacher MODIFY age VARCHAR(11)  -- 修改約束,不能改字段名
ALTER TABLE teacher CHANGE age is_del INT   -- 字段重命名

3.四、刪除表的字段

-- 刪除表的字段
ALTER TABLE teacher DROP is_del

3.五、刪除表

-- 刪除表
 DROP TABLE IF EXISTS student

3.六、插入語句

-- 插入語句(添加)
 INSERT INTO teacher (`name`) VALUES ('xgp')

3.七、修改語句

-- 修改語句
UPDATE teacher SET `name`='xgp',sex='女' WHERE id=1

3.八、設置數據庫的時間

-- 設置數據庫的時間
UPDATE `teacher` SET `birthday` = CURRENT_TIME WHERE id=1

3.九、刪除指定數據

-- 刪除指定數據
DELETE FROM teacher WHERE id=1

3.十、清空一個數據表

-- 徹底清空一個數據庫表,表的結構和索引約束不變,自增會歸零
TRUNCATE TABLE teacher

四、DQL:數據查詢語言 data Query language

4.一、使用別名查詢

-- 查詢(使用別名)
SELECT `name` 姓名,pwd 密碼 FROM teacher 老師表

4.二、拼接字符串

-- 函數 拼接字符串 Concat(a,b)
SELECT CONCAT('姓名:',`name`) 新名字 FROM teacher

4.三、去重

-- 去重
SELECT DISTINCT `name` FROM teacher

4.四、查看系統版本

-- 查看系統版本
SELECT VERSION()

4.五、計算結果

-- 計算結果
SELECT 100*3-23 計算結果
SELECT pwd+'1' 密碼加1 FROM teacher

4.六、模糊查詢

-- 模糊查詢
-- like結合 %(表明0到任意個字符) _(表明一個字符)
SELECT `name`,pwd FROM teacher
WHERE `name` LIKE '_g_'

-- in
SELECT id,`name`,pwd FROM teacher
WHERE id IN (4,7,10)

4.七、排序查詢

-- 排序:升序 ASC 降序 DESC
-- order by 經過哪一個字段排序,怎麼排
SELECT * FROM teacher ORDER BY id DESC 
SELECT * FROM teacher ORDER BY id ASC

4.八、分頁查詢

-- 分頁:
SELECT * FROM teacher ORDER BY id DESC LIMIT 2,10

五、經常使用函數

5.一、數學函數

-- 經常使用函數
SELECT ABS(-78) -- 絕對值
SELECT CEILING(9.4) -- 向上取整
SELECT FLOOR(9.4) -- 向下取整
SELECT SIGN(-9) -- 判斷一個數的符號

5.二、字符串函數

-- 字符串函數
SELECT CHAR_LENGTH('哈哈哈') -- 字符串長度
SELECT CONCAT('xgp','aaa')  -- 拼接字符串
SELECT INSERT('asa',1,2,'ss')       -- 替換字符串
SELECT LOWER('AAAAAAAA')    -- 轉小寫
SELECT UPPER('aaaaaaaa')    -- 轉大寫
SELECT INSTR('aaaaa','a')   -- 返回第一次出現子串的索引
SELECT REPLACE('aaaa','a','x')  -- 替換字符串
SELECT SUBSTR('asasasxsssas',4,6)   -- 截取字符串,截取的位置,截取的長度
SELECT REVERSE('aasss') -- 字符串反轉

5.三、時間和日期函數

-- 時間和日期函數(獲取當前日期)
SELECT CURRENT_DATE(); -- 獲取當前日期
SELECT CURDATE();   -- 獲取當前日期
SELECT NOW(); -- 獲取當前的時間
SELECT LOCALTIME(); -- 獲取本地時間
SELECT SYSDATE() -- 獲取系統時間

5.四、系統函數

-- 系統
SELECT SYSTEM_USER()
SELECT USER()
SELECT VERSION()

5.五、聚合函數

-- 聚合函數
SELECT COUNT(*) FROM teacher
SELECT COUNT(字段) FROM teacher   -- 會忽略null值
SELECT COUNT(1) FROM teacher
SELECT COUNT(主鍵) FROM teacher -- 速度更快

SELECT SUM(pwd) 求和 FROM teacher
SELECT AVG(pwd) 平均 FROM teacher
SELECT MAX(pwd) 最高 FROM teacher
SELECT MIN(pwd) 最低 FROM teacher

六、DCL:數據控制語言 (管理用戶權限)data Control

6.一、建立用戶

-- 建立用戶
CREATE USER xgp123 IDENTIFIED BY '123456'

6.二、修改密碼

-- 修改密碼(修改當用戶密碼)
SET PASSWORD = PASSWORD('111111')
-- 修改密碼(修改自定的用戶的密碼)
SET PASSWORD FOR xgp123 = PASSWORD('123456')

6.三、給用戶重命名

-- 給用戶重命名
RENAME USER xgp123 TO xgp

6.四、用戶受權

-- 用戶受權(授予所有的權限,庫,表)
GRANT ALL PRIVILEGES ON *.* TO xgp

6.五、查看指定用戶權限

-- 查看指定用戶權限
SHOW GRANTS FOR xgp

6.六、查看管理員權限

-- 查看管理員權限
SHOW GRANTS FOR root@localhost

6.七、撤銷權限

-- 撤銷權限(撤銷所有權限)
REVOKE ALL PRIVILEGES ON *_* FROM xgp

七、事務

7.一、開啓/和關閉事務的自動提交,mysql默認是開啓的

-- 事務(測試轉帳)mysql 是默認開啓事務自動提交的
SET autocommit = 0; -- 先關閉事務提交
SET autocommit = 1; -- 開啓

7.二、進行手動處理事務

-- 事務開啓
START TRANSACTION -- 標記一個事務的開始

-- 提交
COMMIT

-- 回滾
ROLLBACK

-- 事務結束

-- 瞭解
SAVEPOINT -- 設置一個事務的保存點
ROLLBACK TO SAVEPOINT 保存點名,會滾到保存點

7.三、經過轉帳案例手動測試事務

-- 編寫轉帳案例
CREATE TABLE account (
id INT(3) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(30) NOT NULL,
`money` DECIMAL(9,2) NOT NULL,
PRIMARY KEY (id)
)ENGINE=INNODB DEFAULT CHARSET = 'utf8'

INSERT INTO account(`name`,money) VALUES ('張三',2000.00),('李四',10000.00)

-- 模擬轉帳
SET autocommit = 0; -- 關閉自動提交
START TRANSACTION; -- 開啓事務
UPDATE account SET money = money - 500 WHERE `name` = '張三';
UPDATE account SET money = money + 500 WHERE `name` = '李四';

COMMIT; -- 提交事務
ROLLBACK; -- 回滾
SET autocommit = 1; -- 恢復默認值

八、其餘技術

8.一、對數據庫進行備份

命令行執行導出命令 mysqldump
mysqldump -hlocalhost -uroot -p123456 westos > D:/a.sql

8.二、對數據庫進行導入

-- 導入
source sql文件路徑

8.三、對數據庫進行md5加密

-- 數據庫級別的MD5加密
UPDATE teacher SET pwd = MD5(pwd)
-- 插入時進行加密
INSERT INTO teacher(`name`,pwd) VALUES ('aaa',MD5('123456'))
-- 如何校驗
SELECT * FROM teacher WHERE `name`='aaa' AND pwd = MD5('123456')

九、mysql基礎語法的詳細語法格式文檔

mysql產品的常見命令

1,mysql服務的啓動和中止

方式一:計算機——右鍵管理——服務
方式二:經過管理員身份運行
    net start 服務名(啓動服務)
    net stop 服務名(中止服務)

2,mysql服務的登錄和退出

方式一:經過mysql自帶的客戶端
    只限於root用戶
方式二:經過cmd命令行
    登錄:
        mysql [-h主機名 -P端口號] -u用戶名 -p[密碼]
    退出:
        exit    或者      ctrl+c

3,sql語句的基本使用

1.查看當前全部數據庫
    show databases;
2.打開指定庫
    user 庫名
3.查看當前庫的全部表
    show tables;
4.查看其它庫的全部表
    show tables from 庫名;
5.建立表
    create table 表名 (
        列名 列類型,
        列名 列類型,
        ...
    );
6.查看錶結構
    desc 表名;
7.查看服務器版本
    方式一:登錄到mysql服務端
        select version();
    方式二:沒有登錄到mysql服務端
        mysql --version     或者  mysql -V
8.註釋
    單行:#註釋文字
        -- 註釋文字
    多行:/*註釋文字*/

DQL語言的學習

階段一:1,基礎查詢

語法:
    select 查詢列表 from 表名;
查詢列表:
    表中的字段,常量值,表達式,函數
1.查詢表中的單個字段
    select last_name from employees;
2.查詢表中的多個字段
    select last_name,salary,email from employees;
3.查詢表中的全部字段
    select * from employees;

2,其餘基礎查詢

1.查詢常量值
    select 100;
    select 'join';
2.查詢表達式
    select 100*98;
    select 100%98;
3.查詢函數
    select version();

3,爲字段起別名

1.方式一:(使用as)
    select 100%98 as 結果;
    select last_name as 姓 from employees;
2.方式二:(使用空格)
    select last_name 姓 from employees;

4,去重(distinct)

1.案例:查詢員工表的全部部門的編號
    select distinct
        department_id
    from
        employees;

5,+號的做用

1.案例:查詢員工名和姓鏈接成一個字段,並顯示爲 姓名
    錯誤作法:
        select 
            last_name + first_name as 姓名
        from
            employees;
    正確作法:(使用concat()函數)
        select 
            concat(last_name,first_name) as 姓名
        from 
            employees;

6,ifnull()函數的使用

格式:
    ifnull(判斷是否爲空的參數,若爲空返回的值)
舉例:
    select ifnull(commission_pct,0) as 獎金率;

階段二:1,條件查詢

語法:
    select 
        查詢列表 
    from 
        表名
    where
        篩選條件;
篩選條件:
    1.按照條件表達式篩選
        條件運算符:
            > < = ....
        案例:
            select 
                * 
            from 
                employees 
            where 
                salary > 12000;
    2.按照邏輯運算符刷選
        邏輯運算符:
            && || !
        mysql推薦:
            and or not
        案例:
            select 
                * 
            from 
                employees 
            where 
                salary > 12000 and salary < 20000;
    3.模糊查詢
        1.關鍵字:like
        特色:
            通常和通配符使用
                % 任意多個字符,包含0個字符
                _ 任意多個字符
        案例:查詢員工名中包含字符a的員工信息
            select 
                *
            from
                employees
            where
                last_name like '%a%';
        特殊案例(須要轉義通配符 escape):查詢員工名中第二個字符爲_的員工信息
            select 
                *
            from
                employees
            where
                last_name like '_$_%' escape '$';
        2.關鍵字:between and
        特色:
            包含臨界值
        案例:
            select 
                * 
            from 
                employees 
            where 
                salary between 12000 and 20000;
        3.關鍵字:in
        案例:
            select 
                * 
            from 
                employees 
            where 
                job_id in ('IT_PROT','AD_VP','AD_PRES');
        4.關鍵字:is null
        注意:=號不能判斷null值
        案例:
            select
                *
            from 
                employees
            where
                commission_pct is null;

2,兩個特殊符號的介紹(<>,<=>)

1.<>至關於!=,不過mysql更推薦改寫法
2.<=>安全等於,能夠判斷null值

階段三:1,排序查詢

語法:
    select 
        查詢條件
    from 
        表
    [where 篩選條件]
    order by
        排序列表 [asc|desc]
注意:
    asc:升序
    desc:降序
    不寫:默認升序
案例(從高到低 desc):
    select
        *
    from
        employee
    order by
        salary desc;
案例(從低到高 asc):
    select
        *
    from
        employee
    order by
        salary asc;
特殊案列:按姓名的字節長度顯示員工的姓名和工資(按函數排序 length(last_name))
    select 
        length(last_name) 字節長度,last_name,salary
    from 
        employees
    order by 
        length(last_name) desc;

2,多個字段排序

1.案例:查詢員工信息,要求先按工資排序,再按員工編號排序【按多個字段排序】
    select 
        *
    from
        employees
    order by
        salary asc,employee_id desc;

階段四:常見函數

1.調用:select 函數名(實參列表) [from 表];
2.分類:單行函數,聚合函數

1,字符函數

1.length(字符) 獲取參數值的字節個數
    select length('join');
    select length('哈');
2.concat(參數1,參數2,...) 拼接字符串
    select concat(last_name,'_',first_name) 姓名 from employees;
3.upper(字符) lower(字符)
    select upper('dadada');
    select lower('HJJJI');
4.substr(字符,位置1,位置2),substring(字符,位置1,位置2) 截取字符
    注意:mysql中索引從1開始
        select substr('hduxshdfkjsf',2,6);
5.instr(字符,查找的字符字串) 放回子串第一次出現的索引,若是找不到放回0
    select instr('dsfsfd','fs');
6.trim(字符) 去除先後空格
    select length(trim(' 長記性了 ')) as out_put
其餘用法:去除先後指定字符
    trim(字符 from 字符串);
    select trim('a' from 'aaaaaaaaa或許是第aaaaaacxhddjkhaaaaaaaaa') as out put;
7.lpad(字符,個數,填充字符) 用指定的字符實現左填充指定的長度
    select lpad('xgp',2,'*') as out_put;
8.rpad(字符,個數,填充字符) 用指定的字符實現右填充指定的長度
    select rpad('xgp',12,'*') as out_put;
9.replace(原字符串,要替換字符,替換字符) 替換
    select replace('xgp123','xgp','123') as oup_put;

2,數學函數

1.round(數值,保留幾位小數) 四捨五入
    select round(1.65);
    select round(1.675,2);
2.ceil(數值) 向上取整
    select ceil(1.02);
3.floor(數值) 向下取整
    select floor(-9.99);
4.truncate(數值,保留幾位小數) 截斷
    select truncate(1.66,1);
5.mod(被取餘數,取餘子) 取餘
    select mod(-10,-3);

3,日期函數

1.now() 放回當前系統的日期+時間
    select now();
2.curdate() 放回當前系統日期,不包含時間
    select curdate();
3.curtime() 放回當前系統時間,不包含日期
    select curtime();
4.能夠獲取指定的部分,年、月、日、小時、分鐘、秒
    select year(now()) 年;
5.str_to_date(格式,字符類型) 將日期格式的字符轉換成指定格式的日期
    select str_to_date('1998-3-2','%Y-%c-%d');
6.date_format(格式,字符類型); 將日期轉換成字符
    select date_format(now(),'%y年%m月%d日');

4,其餘函數

1.select version(); 查看mysql版本
2.select database(); 查看當前數據庫
3.select user(); 查看當前用戶

5,流程控制函數

1.if(判斷條件,if結果,else結果)函數 if else 的效果
    select if(10>5,'大','小');
2.case()函數的使用一
    case 要判斷的字段或者表達式
    when 常量1 then 要顯示的值1或語句1
    when 常量2 then 要顯示的值2或語句2
    when 常量3 then 要顯示的值3或語句3
    ......
    else 要顯示的值n或者語句n
    end

案例:查詢員工工資,要求
    部門號=30,顯示工資爲1.1倍
    部門號=40,顯示工資爲1.2倍
    部門號=50,顯示工資爲1.3倍
    其餘部門,顯示爲原工資

    SELECT 
        salary 原始工資,department_id ,
    CASE 
        department_id = 30 
    WHEN 30 THEN salary*1.1
    WHEN 40 THEN salary*1.2
    WHEN 50 THEN salary*1.3
    ELSE 
        salary
    END 
        AS 新工資
    FROM 
        employees;
3.case()函數的使用二
    case 
    when 條件1 then 要顯示的值1或語句1
    when 條件2 then   要顯示的值2或語句2
    ......
    else 要顯示的值n或語句n
    end

案例:查詢員工的工資的狀況
    若是工資>20000,A
    若是工資>15000,B
    若是工資>10000,C
    不然 D

    SELECT salary,
    CASE 
    WHEN salary > 20000 THEN 'A'
    WHEN salary > 15000 THEN 'B'
    WHEN salary > 10000 THEN 'C'
    ELSE 'D'
    END AS 工資級別
    FROM employees;

6,聚合函數

1.sum(字段) 求和 avg() 平均值 min() 最小值 max() 最大值 count() 計數
    select sum(salary) from employees;
2.特色:
    1.sum(),avg() 支持數值型
        min(),max(),count() 支持任何類型
    2.上述聚合函數都排除了null值
3.和distinct搭配使用
    select count(distinct salary),count(salary) from employees;
4.count() 函數的詳細介紹
    select count(*) from employees;
    select count(1) from employees;
    效率:
        MYISAM存儲引擎下,count(*) 的效率高
        INNODB存儲引擎下,count(*)和count(1)的效率差很少,比count(字段)要高一些
5.和聚合函數使用,通常都不會帶字段

階段五:1,分組查詢

1.語法:
    select 分組函數,列 (要求出如今group by的後面)
    from 表
    [where 篩選條件]
    group by 分組的列表
    [order by 子句]
2.注意:
    查詢列表必須特殊,要求是分組函數和group by後出現的字段
3.案例1:查詢每一個工種的最高工資
    select max(salary),job_id 
    from employees
    group by job_id;

2,添加分組前篩選

案例1:查詢郵箱中包含a字符的,每一個部門的平均工資
    select 
        avg(salary),department_id 
    from 
        employees
    where
        email like '%a%' 
    group by
        department_id;
案例2:查詢有獎金的每一個領導手下員工的最高工資
    select 
        max(salary),manager_id
    from 
        employees
    where 
        commission_pct is not null 
    group by
        manager_id;

3,添加分組後篩選

1.案例1:查詢哪一個部門的員工個數>2
    1.查詢每一個部門的員工個數
        select 
            count(*),department_id 
        from
            employees
        group by 
            deparment_id;
    2.根據1的結果,查詢哪一個部門的員工數>2
        select 
            count(*),department_id 
        from
            employees
        group by 
            deparment_id;
        having 
            count(*)>2;
2.案例2:查詢每一個工種有獎金的員工的最高工資>12000的工種編號和最高工資
    select
        max(salary),job_id
    from 
        employees
    where
        commission_pct is not null
    group by 
        job_id
    having
        max(salary) > 12000;

4,按多個字段分組

1.案例:查詢每一個部門每一個工種的員工的平均工資
    select 
        avg(salary),department_id,job_id 
    from
        employees
    group by
        deparentment_id,job_id;

5,添加排序

1.案例:查詢每一個部門各個工種的員工的平均工資,而且按平均工資的高低顯示
    select 
        avg(salary) a,department_id,job_id
    from 
        employees
    where 
        department_id is not null
    group by
        job_id,department_id
    having
        avg(salary) > 10000
    order by 
        avg(salary) desc;

階段六:1,鏈接查詢(多表查詢)

笛卡爾乘積現象:沒有有效的鏈接條件


如何避免:添加有效的鏈接條件

學習

舉例:
    SELECT 
        NAME,boyName 
    FROM 
        boys,beauty
    WHERE 
        beauty.boyfriend_id = boys.id;

分類:測試

按年代分類:
    sql92標準:僅僅只支持內鏈接
    sql99標準【推薦】:支持內鏈接+外鏈接(左外和右外) + 交叉鏈接
按功能分類:
    內鏈接:
        等值鏈接
        非等值鏈接
        自鏈接
    外鏈接:
        左外鏈接
        右外鏈接
        全外鏈接
    交叉鏈接

2,sql92標準

1,等值鏈接

1.案例1:查詢員工名和對應的部門名
    SELECT 
        last_name,department_name
    FROM
        employees,departments
    WHERE
        employees.department_id = departments.department_id
2.案例2:查詢每一個工種的工種名和員工的個數,而且按員工個數升序
    SELECT 
        job_title,COUNT(*)
    FROM 
        employees e,jobs j
    WHERE 
        e.job_id = j.job_id
    GROUP BY
        job_title
    ORDER BY
        COUNT(*) DESC;
3.案例3:查詢員工名、部門名和所在的城市(三表查詢)
    SELECT
        last_name,department_name,city
    FROM 
        employees e,departments d,locations l
    WHERE
        e.department_id = d.department_id
    AND
        d.location_id = l.location_id
    AND
        city LIKE 's%'
    ORDER BY
        department_name DESC;

2,非等值鏈接
1.案例1:查詢員工的工資和工資級別

SELECT
        salary,grade_level
    FROM
        employees e,job_grades g
    WHERE
        salary BETWEEN g.lowest_sal AND g.highest_sal;

3,自鏈接
1.案例:查詢 員工名和上級的名稱

SELECT 
        e.employee_id,e.last_name,m.employee_id,m.last_name,m.department_id
    FROM
        employees e,employees m
    WHERE 
        e.manager_id = m.employee_id;

3,sql99標準

1.語法:
    select
        查詢列表
    from 
        表1 別名 鏈接類型
    join
        表2 別名
    on
        鏈接條件
    [where
        篩選條件]
    [group by
        分組]
    [having
        篩選條件]
    [order by
        排序列表]

2.鏈接類型
    內鏈接(*):inner
    外鏈接:
        左外(*):left [outer]
        右外(*):right [outer]
        全外:full [outer]
    交叉鏈接:cross join

1,內鏈接

1.語法:
    select
        查詢列表
    from
        表1 別名
    inner join
        表2 別名
    on 
        鏈接條件

1,等值鏈接

1.案例1:查詢哪一個部門的員工個數>3的部門名和員工個數,並按照個數降序(添加排序)

    1.查詢每一個部門的員工個數
        SELECT 
            COUNT(*),department_name
        FROM 
            employees e
        INNER JOIN
            departments d
        ON
            e.department_id = d.department_id
        GROUP BY 
            department_name
    2.在1的結果上篩選員工個數>3的記錄,並排序
        SELECT 
            COUNT(*),department_name
        FROM 
            employees e
        INNER JOIN
            departments d
        ON
            e.department_id = d.department_id
        GROUP BY 
            department_id
        HAVING 
            COUNT(*) > 3
        ORDER BY
            COUNT(*) DESC;

2,非等值鏈接

2.案例1:查詢員工的工資級別

    SELECT 
        salary,grade_level
    FROM 
        employees e
    JOIN 
        job_grades g
    ON 
        e.salary 
    BETWEEN 
        g.lowest_sal 
    AND 
        g.highest_sal;
相關文章
相關標籤/搜索