SQL結構化查詢語句


SQL結構化查詢語句

SQL定義了查詢所有關系型數據庫的規則。

1、通用語法

  • SQL語句可以單行或者多行書寫,以分號結尾
  • 可以使用空格和縮進增強可讀性
  • 不區分大小寫,但是關鍵字建議大寫
  • 3種注釋
    • 注釋內容;多行注釋/*;-- 注釋內容

2、SQL分類

  • DDL(Date Definition Language)數據定義語言
    • 用來定義數據庫對象:數據庫、表、列等,包括關鍵字:create,drop、alte
  • DML(Data Manipulation Language)數據操作語言,增刪改
    • 用來對數據庫的表中的數據進行增刪查改。關鍵字:insert、delete、update
  • DQL(Date Query Language)數據查詢語言,查
    • 用來查詢數據庫表中的記錄。關鍵字:select、where
  • DCL(Data Control Language)數據控制語言
    • 用來定義數據庫的訪問權限,安全級別,以及創建用戶,關鍵字:GRANT、REVOKE

3、DDL操作數據庫、表

  1. 操作數據庫:CRUD

    • C(create)創建
    SQL語句 描述
    CREATE database (if not exists) 數據庫名 (character set 字符集名稱); 創建一個新的數據庫,括號是一個判斷是否存在、設定該數據庫的字符集
    • R(Retrieve)查詢:
    SQL語句 描述
    show databases; 查看所有的數據庫名稱
    show create database 數據庫名; 查看某個數據庫的創建語句
    • U(Update)修改
    SQL語句 描述
    alter database 數據庫名 character set 字符集名稱; 修改數據庫使用的字符集
    • D(Delete)刪除,使用前三思
    SQL語句 描述
    drop database (if exits )數據庫名; 判斷存在就刪除數據庫
    • 查詢當前在使用的數據庫
    SQL語句 描述
    select database(); 查詢當前在使用的數據庫
    • 使用數據庫
    SQL語句 描述
    use 數據庫名稱 使用某個數據庫

    2、操作數據庫表

    • C(create)創建

      語法

      create table 表名稱(
          列名1 數據類型1,
          列名2 數據類型2,
          列名3 數據類型3,
          ...
          列名n 數據類型n
      ); # 最后一列不要加逗號,分號等,分號是結束標志
      

      其他創建表語句create table table1_copied like table1,創建一個表,復制table1

      數據類型:

      數據類型 描述
      int 整數
      double(n, m) 浮點數類型,指定一共有n位,小數點后保留m位
      date 日期類型,只包含年月日,yyyy-MM-dd
      datetime 日期時間類型,包含年月日時分秒,yyyy-MM-dd HH:mm:ss
      timestamp 時間戳類型,包含年月日時分秒,yyyy-MM-dd HH:mm:ss,如果將來不給這個字段賦值為null,就自動使用系統時間
      varchar(n) 字符串類型,要指定最大為n個字符
    • R(Retrieve)查詢,進到某個數據庫后

      SQL語句 描述
      show tables; 查看該數據庫所有的表
      desc 表名稱; 查詢一個表的表結構,有什么字段,字段類型,是否主鍵等信息
    • U(Update)修改

      • 修改表名:alter table 表名稱 rename to 新表名稱;
      • 修改表的字符集:alter table 表名稱 character set 字符集名稱;
      • 修改列名,數據類型:
        • alter table 表名稱 change 列名稱 新列名稱 新數據類型;
        • alter table 表名稱 modify 列名稱 新數據類型;
      • 刪除列:alter table 表名稱 drop 列名稱;
      • 添加列:alter table 表名稱 add 列名稱 數據類型;
    • D(Delete)刪除表

      SQL語句 描述
      drop table (if exists) 表名稱 刪除表,如果表存在

4、DML:操作表中的數據

  1. 添加數據

    • 語法:insert into 表名稱(列名1, 列名2.....列名n) values(值1, 值2......值n)

      注意

      • 列名和值要一一對應
      • 如果不寫列名,就默認要給所有列添加數據
      • 除了數字類型,其他類型都要用引號引起來
  2. 刪除數據

    • 語法:delete from 表名 [where 條件]

      注意

      • delete from 表名:不寫條件,就刪除表中所有的數據
      • TRUNCATE TABLE 表名:先刪除表,再創建一張一樣的空表,推薦使用這個語句刪除所有記錄
  3. 修改數據

    • 語法:update 表名 set 列名1 = 值1,列名2 = 值2,...[where 條件]

5、DQL:查詢表中的數據

  1. DQL查詢語句

    1. select * from 表名稱:查詢一個表的全部數據

    2. 排序查詢,語法:order by 句子

      • order by 排序字段1 排序方式1, 排序字段2 排序方式2,......;這里的意思是,首先按照排序方式一,如果方式一一樣,那么使用方式二排序;(也就是只有第一種方式一樣時,才會判斷第二種方式)

        注意:排序方式:

        升序:ASC;降序:DESC

        select * from student order by age DESC;(按照年齡降序排序)

    3. 聚合函數,將一列數據作為一個整體,進行縱向的計算。

      • count:計算個數select count(列名稱) from 表名稱
      • 注意:聚合函數排除了空的(NULL)的行,解決方法
        • 替換NULL值的方法:select count(ifNULL(name, " ")) from student;
        • 盡量使用統計的列不要有空值的類,一般是主鍵
        • 使用count(*)
      • max:計算最大值select max(列名) from 表名
      • min:計算最小值select min(列名) from 表名
      • sum:求和select sum(列名) from 表名
      • avg:計算平均值select avg(列名) from 表名
    4. 分組查詢:統計具有相同特征的

      語法:group by 字段 select sex, avg(age), count(id), min(age) from student group by sex;

      注意

      • 分組之后只能查詢的字段,只有分組字段和聚合函數
      • where 在分組之前限定,如果不滿足條件,就不參與分組;having是在分組之后進行限定,如果不滿足條件就不會被查詢出來
      • where后不可以跟聚合函數,having后可以進行聚合函數的判斷
        • select sex, avg(age), count(id), min(age) from student where age > 20 group by sex having count(id) <= 2;
        • 一般可以在聚合函數后寫一個別名,這樣就可以在判斷的時候使用別名
          • select sex, avg(age), count(id) peopleCount, min(age) from student where age > 20 group by sex having peopleCount <= 2;

      分頁查詢

      • 語法:limit 開始的索引,每頁查詢的條數

      • 公式:開始的索引 = (當前的頁碼 - 1) × 每頁顯示的條數

      • 分頁操作是每個數據庫的操作方法是不一樣的,limit關鍵字只是在MySQL可以使用,其他關系型數據庫有自己的語法

6、基礎查詢

  • 多字段查詢語法:SELECT 字段1, 字段2, ... FROM table;
  • 去重:SELECT DISTINCT sex from student;
  • 計算:自己寫一個字段參與參與查詢:SELECT name, math, english, (math + english) FROM student;
    • 注意:如果有NULL參與計算,結果都為NULL,可以使用函數IFNULL()解決:IFNULL(English, 0)。意思是如果English這一列的值有NULL,就用0替代參與計算
  • 別名:可以給自己寫的列起一個別名,使用關鍵字AS(可以省略):SELECT name, ifnull(math, 0) + english AS 總分 FROM student;

7、條件查詢

  1. 關鍵字WHERE后面跟着條件

  2. 運算符:

    運算符 描述
    <, >, =, !=, <=, >= 不等於可以使用!=或者<>, 沒有==
    BETWEEN ... AND 相當於使用 AND連接條件
    IN(集合) 相當於使用OR連接條件
    IS NULL NULL值不能使用=判斷,要使用IS或者 IS NOT
    LIKE
    SELECT * FROM student WHERE math > 60;
    
    SELECT * FROM student WHERE math > 90 AND math <= 92;
    SELECT * FROM student WHERE math BETWEEN 90 AND 92;
    
    SELECT * FROM student WHERE math = 90 OR math = 92;
    SELECT * FROM student WHERE math IN (90, 92, 100);
    
    SELECT * FROM student WHERE math is NULL;-- NULL要使用關鍵字 IS判斷
    SELECT * FROM student WHERE math IS NOT NULL;-- NULL要使用關鍵字 IS判斷
    
  3. 模糊查詢

    LIKE

    占位符:%(任意多個字符),_(單個任意字符)

    SELECT * FROM student WHERE name LIKE '____'; -- name 是四個字符的人
    SELECT * FROM student WHERE name LIKE '孫%'; -- 第一個字是孫的人
    SELECT * FROM student WHERE name LIKE '%八%'; -- 中間有八字的人
    SELECT * FROM student WHERE name LIKE '_八%';-- 第二個子是八的人	
    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM