MySQL查詢語法-基礎篇

MySQL語法基礎

今天把整理的數據的簡單查詢筆記分享出來,如果需要這個demo文件,歡迎添加公衆號SUMER 回覆 demo 索要sql文件

數據的簡單查詢

基本全部查詢

  • 基本目標列查詢
  • 重命名查詢
show databases;
-- 使用目標數據庫
use imooc_demo;
-- 查找全部字段
SELECT * from t_emp;  
-- 查找這三列從t_emp表
SELECT empno, ename, sal from t_emp;  
-- 改名查詢
SELECT ename,empno,sal*12 AS income_year FROM t_emp;

數據分頁

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-B6EffcuF-1578655229470)(./_image/2020-01-10-10-53-46.png)]

  • 偏移量 0,20 從0 到後取20條
  • 20往後取20 就是 20,20
-- 分頁查詢   下邊含義是0-5條
SELECT empno ,ename,sal FROM t_emp LIMIT 0,5;
-- 下邊等價於0-10的意思
SELECT empno ,ename,sal FROM t_emp LIMIT 10;

FROM -> SELECT -> LIMIT

結果集排序

按照某種順序 必須使用ORDER BY
執行順序: SELECT…FROM… ORDER BY 列名 [asc | desc]

-- 排序--升序
SELECT empno ,ename,sal,deptno FROM t_emp ORDER BY sal ASC;
-- 排序--降序
SELECT empno ,ename,sal,deptno FROM t_emp ORDER BY sal DESC;

多字段排序

  • 規定 首要 \ 次要 排序條件
-- 多個排序字段,工資相同按入職排序
SELECT empno ,ename,sal,hiredate,deptno FROM t_emp ORDER BY sal DESC ,hiredate ASC;

-- 查看前五的
SELECT empno,ename,sal FROM t_emp ORDER BY sal DESC LIMIT 0,5;

執行順序: FROM -> SELECT -> ORDER BY -> LIMIT

去除重複記錄

比如從員工表中查詢多少種職業,可能出現重複記錄
加上 DISTINCT 字段

-- 查詢job 不去重
SELECT job FROM t_emp; 
-- 查詢job 去重
SELECT DISTINCT job FROM t_emp ;
  • 注意:
    • distinct 的select只能查詢一列數據,如果查詢多列,重複記錄就會失效
-- 不能重複用--兩個字段,功能消失
SELECT DISTINCT job, ename FROM t_emp ;

-- 不能重複用--兩個字段都加,報錯
SELECT DISTINCT job,DISTINCT ename FROM t_emp ;

-- 不能重複用--後個字段加,報錯
SELECT job,DISTINCT ename FROM t_emp ;

條件查詢

SELECT…FROM …WHERE 條件 and or 條件…

-- 條件查詢 10部門 底薪大於2000的
SELECT empno,ename,sal FROM t_emp WHERE deptno=10 AND sal >=2000;

-- 條件查詢:10 20 兩個部門,薪資大於2000的
SELECT empno,ename,sal , deptno FROM t_emp WHERE (deptno=10 OR deptno=20) AND sal >=2000;

where 四類運算符

  • 數學運算符 + - * / %
  • 比較運算符
  • 邏輯運算符
  • 按位運算符
-- 部門10 ,年薪=底薪+提成,12個月大於15000的,
SELECT empno , ename , sal, hiredate
FROM t_emp
WHERE deptno=10 and (sal+ifnull(comm,0))*12>=15000;
and datediff(now(),hiredate)/365>=20;

比較符號運算

表達式 意義 例子
IS NULL 爲空 comm IS NULL
IS NOT NULL 不爲空 comm IS NOT NULL
BETWEEN AND 範圍 sal BETWEEN 2000 AND 3000
LIKE 模糊查詢 ename LIKE ‘A%’ %代表0-多個字符
REGEXP 正則表達式 ename REGEXP ‘[a-zA-Z]{4}’

下邊是mysql的寫法

-- 測試 IS NOT NULL
SELECT *
FROM t_emp
WHERE comm IS NOT NULL;

-- 測試 BETWEEN AND
SELECT *
FROM t_emp
WHERE comm IS NULL
AND sal BETWEEN 2000 AND 3000;

-- 測試 BETWEEN AND  + LIKE   %佔位符
SELECT *
FROM t_emp
WHERE comm IS NULL
AND sal BETWEEN 2000 AND 3000
AND ename LIKE "%A%";   -- 前後都是可能有東西

-- 測試 BETWEEN AND  + LIKE   _佔位符
SELECT *
FROM t_emp
WHERE comm IS NULL
AND sal BETWEEN 2000 AND 3000
AND ename LIKE "_lake";   -- 這是記住了前邊有1位,後邊是lake的

-- 測試 BETWEEN AND  + 正則表達式
SELECT *
FROM t_emp
WHERE comm IS NOT NULL   -- 它有佣金
AND sal BETWEEN 1000 AND 3000
AND ename REGEXP "^[\\u4e00-\\u9fa5]{2,4}$";    

邏輯運算符

表達式 意義 例子
AND 與 關係 age >18 AND sex=‘男’
OR 或 關係 empno = 8000 OR deptno =20
NOT 非 關係 NOT deptno =20
XOR 異或 關係 age > 18 XOR sex=“男”

練習代碼如下

-- 10和20部門之外
SELECT ename,deptno
FROM t_emp
WHERE NOT deptno IN(10,20) ;

-- 10和20部門之外  異或關係  不是10,20部門的 異或 工資大於2000的
SELECT ename,deptno,sal
FROM t_emp
WHERE NOT deptno IN(10,20) XOR sal>=2000
ORDER BY deptno,sal;

二級制按位運算

  • 二進制位運算的實質是將參與運算的兩個操作數,按對應的二進制數逐位進行邏輯運算
表達式 意義 例子
& 位與關係 3&7
位或關係 3丨7
~ 位取反 ~10
^ 位異或 3^7
<< 左移 10<<1
>> 右移 10>>1
--  按位運算符測試
SELECT 3&7;   -- 答案3
SELECT 3 | 7; -- 答案7
SELECT  ~ 7;  -- 答案18446744073709551608
SELECT 3 ^ 7;  -- 答案4
SELECT 10 << 1; -- 答案20
SELECT 10 >> 1; -- 答案5

where子句注意事項

  • where子句中,條件執行順序從左往右,應該吧索引條件,或者篩選掉最多紀錄的條件寫在最左邊
  • 例如:
-- where注意事項:寫左邊
SELECT empno,ename FROM t_emp
WHERE ename = "FORD" AND sal>=2000;

SELECT empno,ename FROM t_emp
WHERE deptno=10 AND sal>=2000;

各種子句執行順序

FROM -> WHERE -> SELECT -> ORDER BY -> LIMIT

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章