MySQL SQL基礎(chǔ)學(xué)習(xí)

DQL語(yǔ)言學(xué)習(xí)

一、基礎(chǔ)查詢

語(yǔ)法:
SELECT 查詢列表 FROM 表名稱 WHERE 篩選條件 ORDER BY 排序;
特點(diǎn):
  1. 查詢列表可以是:表中的字段、常量值、表達(dá)式(SELECT 100*9;)、函數(shù)(SELECT version();)
  2. 查詢的結(jié)果是一個(gè)虛擬表格
著重號(hào):

``

SELECT `FROM`, `salary`, `email` FROM `employees`;
為查詢結(jié)果起一個(gè)別名
SELECT 100 % 98 AS 結(jié)果;
SELECT last_name AS 姓, first_name AS 名 FROM employees;
SELECT last_name 姓, first_name 名 FROM employees;
SELECT salary AS "out put" FROM employees;
去重
SELECT DISTINCT department_id FROM employees;
mysql中+號(hào)作用

加號(hào)只是運(yùn)算符

SELECT 100 + 99;     如果都為數(shù)值型,則進(jìn)行加法
SELECT '123' + 99;   如果一方為字符型,則試圖把字符型轉(zhuǎn)換為數(shù)值型,再做加法,
SELECT 'john' + 99;  如果轉(zhuǎn)換失敗,則把字符轉(zhuǎn)換為0,再做加法
SELECT NULL + 99;    如果其中一方為null,則結(jié)果肯定為null

二、條件查詢

語(yǔ)法:
SELECT 查詢列表 FROM 表名 WHERE 篩選條件; 

執(zhí)行順序:from 表明 WHERE 條件 SELECT 查詢

條件運(yùn)算符:> < = ,!= <> 安全等于號(hào):<=>
邏輯運(yùn)算符:and or not , 主要是用于連接條件表達(dá)式
模糊查詢 : like BETWEEN AND in is null|is not null

三、排序查詢

語(yǔ)法:
SELECT 查詢列表 FROM 表名 WHERE 篩選條件 ORDER BY 排序列表 ASC | DESC
特點(diǎn):

1 . ASC 代表升序,如果不寫默認(rèn)是升序排序
2 . ORDER BY 子句中可以支持 單個(gè)字段、多個(gè)字段、表達(dá)式、函數(shù)、別名
3 . ORDER BY 一般都是放到最后邊,limit除外;
4 . 執(zhí)行順序 :from 表名 WHERE 條件 SELECT 查詢 ORDER BY

四、常見(jiàn)函數(shù)

函數(shù)可分為六類
  • 字符函數(shù)
  • 數(shù)學(xué)函數(shù)
  • 日期函數(shù)
  • 其他函數(shù)
  • 流程控制函數(shù)

下邊詳細(xì)說(shuō)明:

# 字符函數(shù)
    LENGTH(str)             獲取字節(jié)個(gè)數(shù)
    CONCAT(str1,str2,...)   拼接字符串
    UPPER()                 小寫變大寫
    LOWER(str)              大寫變小寫
    SUBSTR(str FROM pos FOR len) 截取字符串,mysql中索引是從1開始的
    eg : SELECT SUBSTR('123456',2,5)
    SUBSTRING(str FROM pos FOR len)
    INSTR(str,substr)       返回子串在字符串中第一次出現(xiàn)的起始索引,如果找不到返回0
    TRIM([remstr FROM] str) 去掉前后空格,也可以自定義不是空格也可以   SELECT TRIM('a' from 'aaaazhaojieaaa');
    LPAD(str,len,padstr)    指定長(zhǎng)度左填充  SELECT lpad('趙杰',4,'a');
    RPAD(str,len,padstr)    指定長(zhǎng)度右填充
    REPLACE                 全部替換

# 數(shù)學(xué)函數(shù)
    ROUND(X)                  四舍五入
    ROUND(X,D)                小數(shù)點(diǎn)后保留D位
    CEIL()                    向上取整
    FLOOR(X)                  向下取整
    TRUNCATE(X,D)             截?cái)啵?shù)點(diǎn)后保留D位
    MOD                       取余

# 日期函數(shù)
    now                         返回系統(tǒng)日期+時(shí)間
    curdate                     返回系統(tǒng)日期,不包含時(shí)間
    curtime                     返回系統(tǒng)時(shí)間,不包含日期
    YEAR
    MONTH
    MONTHNAME(date)
    datadiff                    查詢兩個(gè)時(shí)間之間距離多少天
    STR_TO_DATE(str,format)            
    DATE_FORMAT(date,format)

# 其他函數(shù)
    VERSION()
    DATABASE
    USER

# 流程控制函數(shù)
    IF(expr1,result,result)  eg:SELECT IF(commission_pct IS NULL,'no','yes') FROM employees
    CASE

五、分組函數(shù)

因?yàn)榉纸M函數(shù)比較常用也比較特殊,這里單獨(dú)拆開記憶

# 分組函數(shù) (又名 聚合函數(shù),統(tǒng)計(jì)使用)
    sum                  求和
    count(1) count(*)    計(jì)數(shù)
    avg                  平均數(shù)
    max                  最大
    min                  最小
    
    特點(diǎn):
      1. sum,avg一般處理數(shù)值,max min count 可以是任意類型
      2. 以上分組函數(shù)都忽略null值
      3. 可以和 DISTINCT 搭配使用
      4. count函數(shù):
              - count(字段):統(tǒng)計(jì)該字段非空值得個(gè)數(shù)
              - count(*)  :統(tǒng)計(jì)結(jié)果集行數(shù)
              效率:
                    - MyISAM存儲(chǔ)引擎,count(*)效率最高
                    - InnoDB存儲(chǔ)引擎,count(1) 和 count(*) 差不多

六、分組查詢

語(yǔ)法:
    SELECT 分組函數(shù),分組后的字段     5
    FROM 表                        1
    WHERE 篩選條件                  2
    GROUP BY 分組的字段             3
    HAVING 分組后的篩選             4
    ORDER BY 排序列表              6

語(yǔ)句順序如上,上邊語(yǔ)句后邊是每個(gè)字句執(zhí)行的順序編號(hào)。
特點(diǎn):
使用關(guān)鍵字 篩選的表 使用關(guān)鍵字
分組前篩選 where 原始表 GROUP BY 的前邊
分組后篩選 HAVING 分組后的結(jié)果 GROUP BY 的后邊

七、連接查詢

含義:

查詢中涉及到了多個(gè)表的字段,需要使用連接查詢,又名 多表查詢。

SELECT 字段1,字段2 FROM 表1,表2
分類:
  • sql 92

  • sql 99

sql92
    等值連接
    非等值連接
    自連接
sql99
    內(nèi)連接
        等值
        非等值
        自連接
    外連接
        左外
        右外
        全外(mysql不支持)
    交叉連接
特點(diǎn):

1.一般為表起別名
2.多表的順序可以調(diào)換
3.n表連接至少需要n-1個(gè)條件
4.等值連接的結(jié)果是多表的交集部分

sql92 語(yǔ)法:
SELECT 查詢列表 
FROM 表1 別名 表2 別名 
WHERE 表1.key = 表2.key 
AND 篩選條件 
GROUP BY 分組字段 
HAVING 分組后的篩選 
ORDER BY 排序字段 
sql99 語(yǔ)法:
SELECT 查詢列表 
FROM 表1 別名 
連接類型 join 表2 別名 
on 連接條件 
WHERE 篩選條件 
GROUP BY 分組
HAVING 分組后的篩選條件 
ORDER BY 排序

---------------------------------------------------------------------------------------------
分類:
    內(nèi)連接:INNER
    外鏈接
        左外:LEFT (OUTER)
        右外:RIGHT (OUTER)
        全外:FULL (OUTER) mysql不支持
    交叉連接:CROSS
---------------------------------------------------------------------------------------------
內(nèi)連接:
    等值
        內(nèi)連接特點(diǎn):
            1.inner可以省略
            2.篩選條件放在where后邊,連接條件放在on后邊
            3.和sql92一樣,都是查詢交集
    非等值
    自連接

外鏈接:
    應(yīng)用場(chǎng)景:用于查詢一個(gè)表中有,另一個(gè)表中沒(méi)有的記錄
    特點(diǎn):
        1.外連接的查詢結(jié)果為主表中的所有記錄
            如果從表中有和他匹配的值,則顯示匹配值
            如果從表中沒(méi)有和它匹配的,則顯示null
            外連接查詢結(jié)果=內(nèi)連接查詢結(jié)果+主表中有而從表中沒(méi)有的記錄
        2.左外連接,left join 左邊是主表
            右外連接,right join 右邊是主表
        3.左外和右外交換兩個(gè)表的順序,可以實(shí)現(xiàn)同樣的效果

交叉連接:
    99語(yǔ)法的笛卡爾積效果
    cross JOIN

image.png

image.png

八、子查詢

概念:

出現(xiàn)在其他語(yǔ)句內(nèi)部的select語(yǔ)句,稱為子查詢或內(nèi)查詢,內(nèi)部嵌套其他select語(yǔ)句的查詢,稱為外查詢或主查詢。

語(yǔ)法:
SELECT last_name 
FROM employees 
WHERE departments_id 
in 
(SELECT departments_id FROM departments WHERE locations_is = 10)

九、分頁(yè)件查詢

十、union聯(lián)合查詢

DML語(yǔ)言學(xué)習(xí)

一、插入語(yǔ)句

二、修改語(yǔ)句

三、刪除語(yǔ)句

DDL語(yǔ)言學(xué)習(xí)

一、庫(kù)和表的管理

二、常見(jiàn)數(shù)據(jù)類型介紹

三、常見(jiàn)約束

TCL語(yǔ)言學(xué)習(xí)

一、事務(wù)和事務(wù)處理

視圖的講解

存儲(chǔ)過(guò)程和函數(shù)

流程控制結(jié)構(gòu)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容