sql語句學(xué)習(xí)總結(jié)

先總結(jié)

sql語句按W3Cschool上分類有數(shù)據(jù)庫操作語言和數(shù)據(jù)庫定義語言兩個部分組成,根據(jù)那那種分法可以讓我們更好的理解SQL,另外自己在網(wǎng)上找到一張圖片,可以讓我更好的寫出SQL語句。在后期的學(xué)習(xí)中在一一在每條SQL語句下補(bǔ)上學(xué)習(xí)心得。

mysql執(zhí)行順序.png

               mysql執(zhí)行順序

SQL包括兩個部分:數(shù)據(jù)操作語言 (DML) 和 數(shù)據(jù)定義語言 (DDL)。

DML部分:
  • SELECT - 從數(shù)據(jù)庫獲取數(shù)據(jù)
  • UPDATE - 更新數(shù)據(jù)庫數(shù)據(jù)
  • DELETE - 刪除數(shù)據(jù)庫數(shù)據(jù)
  • INSERT INTO - 向數(shù)據(jù)庫中插入數(shù)據(jù)
DDL重要部分:
  • CREATE DATABASE - 常見數(shù)據(jù)庫
  • ALTER DATABASE - 修改數(shù)據(jù)庫
  • CREATE TABLE - 創(chuàng)建表
  • ALTER TABLE - 修改表
  • DROP TABLE - 刪除表
  • CREATE INDEX - 創(chuàng)建索引
  • DROP INDEX - 刪除索引

數(shù)據(jù)庫

  • show database 查看所有數(shù)據(jù)庫
  • use database_name 選數(shù)據(jù)庫
  • show tables 查看指定數(shù)據(jù)庫中的所有表
  • rename table old_name to new_name 修改表名

基礎(chǔ)用法

1.select語句:從表中選取數(shù)據(jù),結(jié)果放在一個結(jié)果表中
       SELECT 列名稱 FROM 表名稱

2.select distinct:從表中選出唯一的值
       SELECT DISTINCT 列名稱 FROM 表名稱

3.where 子句:有條件的從表中選擇數(shù)據(jù)
       SELECT 列名稱 FROM 表名稱 WHERE 列 運(yùn)算符 值
       其中操作符between表示兩者之間,like表示按某種搜索模式

4.and & or:基于一個以上的條件對記錄進(jìn)行過濾,用于where子句中

5.order by:用于根據(jù)指定的列(可以多列)對數(shù)據(jù)結(jié)果集進(jìn)行排序;倒序DESC,ASC
      正序。

6.insert into:向表中插入新的行
       INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)

7.update:修改表中的數(shù)據(jù)
      UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值

8.delete:刪除表中的行
      DELETE FROM 表名稱 WHERE 列名稱 = 值

9.limit:規(guī)定要返回記錄的數(shù)目
    SELECT * FROM TABLE_NAME LIMIT NUM


where子句的各種操作

10.like:在where的子句中搜索列的指定模式
    用好通配符:
        %:替代一個或多個字符
        -:替代一個字符
         [ ABC]:ABC中的任何一個
         [!ABC]:不包括ABC任何一個
11.in:規(guī)定where子句中規(guī)定多個值

12.between and:where子句中選取介于兩個值之間的范圍(mysql包括兩端

13.alias:為列名稱和表名稱建立別號
    表的alias語法:select column_name from table_name as alias_name 
   列的alias語法:select column_name as alias_name from table_name


join操作

14.join:用于根據(jù)兩個或多個表中的列之間的關(guān)系,從這些表中查詢數(shù)據(jù)

15.inner join:內(nèi)連接,在表中存在至少存在一個匹配時,該關(guān)鍵字返回行
       SELECT column_name(s) 
       FROM table_name1
       INNER JOIN table_name2
       ON table_name1.column_name=table_name2.column_name

16.left join:左鏈接,此關(guān)鍵字會從左表(table_name1)中返回所有行,即        使在有右表(table_name2)中沒有匹配
      SELECT column_name(s)
      FROM table_name1
      LEFT JOIN table_name2
      ON table_name1.column_name=table_name2.column_name

17.right join:右鏈接,此關(guān)鍵字會在右表(table_name2)返回所有行,即使在左表
      (table_name1)中沒有匹配的行

18.full join:只要其中某個表存在匹配,此關(guān)鍵字就會返回左右表均有的行

多表操作

19.union:用于合并兩個或者多個select語句,使用“union all”可以包括重復(fù)的值

20.select into:從一個表中選取數(shù)據(jù)插入另一個表,主要用于備份數(shù)據(jù)        SELECT */column_name
        INTO new_table_name [ in externaldatabase]
        FROM table_name1
        INNER JOIN table_name2
       ON Person.Id_P = Orders.Id_P

21.CREATE DATABASE database_name:創(chuàng)建數(shù)據(jù)庫

22.CREATE TABLE table_name(
      列名稱1,列類型
      列名稱2,列類型
      列名稱3,列類型
)


sql數(shù)據(jù)類型.PNG

SQL約束

約束:用于顯示加入表中列的數(shù)據(jù)類型,可在建表時(CREATE TABLE)或者建表后(ALTER TABLE)

23.NOT NULL:強(qiáng)制不接受NULL值,如果不包括值時就不能插入

24.UNIQUE:唯一標(biāo)識數(shù)據(jù)庫中的每條記錄。

  • UNIQUE(Id_P)
  • CONSTRAINT uc_PersonID UNIQUE(Id_P, lastname)
  • ALTER TABLE persons ADD UNIQUE(Id_P)
  • ALTER TABLE persons ADD CONSTRAINT us_PersonID UNIQUE( Id_P, lastname )
  • ALTER TABLE persons DROP INDEX person_id

25.PRIMARY KEY:用法與上面一樣,但還是KEY每個表只有一個,而unique可以有多個

  • PRIMARY KEY (id_p)
  • CONSTRAINT us_personID PRIMARY KEY (id_p,last name)
  • ALTER TABLE persons ADD PRIMARY KEY (id_P)
  • ALTER TABLE persons ADD CONSTRAINT uc_personId PRIMARY KEY (p_id, person_id)
  • ALTER TABLE persons DROP PRIMARY KEY

26.FOREIGN KEY:指向另一個表中的PRIMARY KEY

  • FOREIGN KEY (p_id) REFERENCES persons (p_id)
  • CONSTRAINT uc_personID FOREIGN KEY (p_id) REFERENCES persons (p_id)
  • ALTER TABLE orders ADD FOREIGN KEY (p_id) REFERENCES persons (p_id)
  • ALTER TABLE orders ADD CONSTRAINT uc_personID FOREIGN KEY (p_id) REFERENCES persons (p_id)
  • ALTER TABLE orders DROP FOREIGN KEY (p_id)

27.CHECK:用于限制列中值的范圍

  • CHECK (ID_p > 0)
  • CONSTRAINT chk_person CHECK( ID_P >0 AND city = 'Sandnes')
  • ALTER TABLE persons ADD CHECK (ID_p > 0)
  • ALTER TABLE persons ADD CONSTRAINT chk_persons CHECK( ID_P >0 AND city = 'Sandnes')
  • ALTER TABLE persons DROP CHECK chk_person

28.DEFAULT:用于向列中插入默認(rèn)值

  • DEFAULT "值"
  • ALTER TABLE persons
    ALTER City Set DEFAULT "值"
  • ALTER TABLE persons
    ALTER City DROP DEFAULT

引用

CREATE INDEX用于在表中創(chuàng)建索引,在不讀取表的情況下,索引使數(shù)據(jù)庫應(yīng)用程序可以更快的查找數(shù)據(jù)

29.CREATE INDEX 語法

  • 普通的
    CREATE INDEX index_name
    ON table_name(column_name)
  • 唯一的
    CREATE UNIQUE INDEX index_name
    ON table_name(column_name)

30.DROP語法
ALTER TABLE table_name DROP INDEX index_name
TRUNCATE TABLE 表名稱——清空表

31.ALTER TABLE:用于在已有的表中添加、修改或者刪除列

  • 增加列
    ALTER TABLE table_name
    ADD column_name datatype
  • 刪除列
    ALTER TABLE table_name
    DROP COLUMN column_name
  • 改變列
    ALTER TABLE table_name
    ALTER COLUMN column_name datatype

32.AUTO-INCREMENT:自動創(chuàng)建主鍵值

33.CREATE VIEW:創(chuàng)建視圖

  • 創(chuàng)建視圖
    CREATE VIEW [view_name] AS
    SELECT column_name
    FROM table_name
    WHERE condition
  • 撤銷視圖
    DROP VIEW vie_name
  • 更新視圖
    CREATE OR REPLACE VIEW [view_name] AS
    注釋:視圖儲存的是一個sql語句,更新視圖只能對沒有計算過的視圖進(jìn)行操作,此處有一個algorithm=merge,temptable

34.mysql的Date數(shù)據(jù)類型

  • DATE - 格式 : YYYY-MM-DD
  • DATETIME - 格式: YYYY-MM-DD HH:MM:SS
  • TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS
  • YEAR - 格式: YYYY 或 YY
mysql的date函數(shù).PNG

35.NULL值是可選字段,必須用IS NULL 和IS NOT NULL 操作符

  • IFNULL(UnitsOnOrder,0),null時用-0取代
  • COALESCE(UnitsOnOrder,0)

SQL函數(shù)

    SELECT function(列) FORM 表

基本類型

  • Aggregate 函數(shù):此函數(shù)操作面向一系列的值,并返回單一的值
  • Scalar 函數(shù):此函數(shù)操作單一的值,返回基于輸入值的但一值
  • 1.AVG函數(shù):求平均數(shù)
    SELECT AVG(column_name) from table_name

  • 2.COUNT函數(shù):返回指定列的值的數(shù)目
    SELECT COUNT(column_name) from table_name
    SELECT COUNT(DISTINCT column_name) from table_name

  • 3.FIRST函數(shù):返回指定字段中的第一個記錄的值
    SELECT FIRST(column_name) from table_name

  • 4.LAST函數(shù):返回指定字段中指定的最后一個記錄的值
    SELECT LAST(column_name) from table_name

  • 5.MAX函數(shù):返回指定列中最大的值,不包括NULL
    SELECT MAX(column_name) from table_name

  • 6.MIN函數(shù):返回指定列中最小的值,不包括NULL
    SELECT MIN(column_name) from table_name

  • 7.SUM函數(shù):返回數(shù)字列的總數(shù)
    SELECT SUM(column_name) from table_name

  • 8.Group by函數(shù):結(jié)合合計函數(shù),根據(jù)一個或多個列對結(jié)果集進(jìn)行分組
    SELECT column_name, aggregate_function(column_name)
    FROM table_name
    WHERE column_name operator value
    GROUP BY column_name1,column_name2
    注釋:group沒有順序之分,只要不同就要按不同的組顯示

  • 9.Having子句:篩選結(jié)果

  • 10.UCASE函數(shù):把字段的值轉(zhuǎn)換為大寫
    SELECT UCASE(column_name) FROM table_name

  • 11.LCASE函數(shù):把字段的值轉(zhuǎn)換為小寫
    SELECT LCASE(column_name) FROM table_name

  • 12.MID函數(shù):從文本字段中提取字符
    SELECT MID(column_name,start,length) FROM table_name

  • 13.LEN函數(shù):返回文本字段中值的長度
    SELECT LEN(column_name) FROM table_name

  • 14.ROUND函數(shù):用于把數(shù)字字段舍入為指定的小數(shù)位數(shù)
    SELECT ROUND(column_name,decimals) FROM table_name

  • 15.NOW函數(shù):返回當(dāng)前的日期和時間
    SELECT NOW() FORM table_name

  • 16.FORMAT函數(shù):用于對字段的顯示進(jìn)行格式化
    SELECT FORMAT(column_name,format) FROM table_name

唯一性索引:該數(shù)據(jù)列可以為空,但是只要有數(shù)據(jù)就必須保證此列取值的唯一性

數(shù)據(jù)類型:decimal 和 numeric(相同的類型)類型用于保存必須為確切精度的值,如貨幣數(shù)據(jù),最大位數(shù)為65位。decimal(5,2):5位,小數(shù)點后2位

SQL模式:嚴(yán)格和不嚴(yán)格
查看模式:select @@sql_mode;
設(shè)置模式:set global sql_mode= '';

char和varchar區(qū)別:比較時var去掉空格,varchar不去掉空格;

找出非法ENUM列:
select * from tab_name where enum_col=0;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • SQL SELECT 語句 一、查詢SQL SELECT 語法 (1)SELECT 列名稱 FROM 表名稱 (2...
    有錢且幸福閱讀 5,690評論 0 33
  • 學(xué)習(xí)web安全足足有一個半月有余,之前學(xué)的是前端,也會一點python。。好吧差不多忘了。常規(guī)工具算是熟悉基本...
    一葉紅塵哦喲閱讀 3,404評論 4 92
  • mysql和oracle語法都差不多,但還是有差別,查閱資料后我總結(jié)了一套完整的sql語句大全,供初學(xué)者學(xué)習(xí) 1....
    譚魚魚閱讀 1,875評論 0 4
  • 也許,漫漫人生路,自己一個人追趕著某人,那人不曾停下腳步,你只能一路悶頭追隨,他的速度太快,你無法與他一直同步。 ...
    亦心戀閱讀 300評論 0 1
  • 去年的九月 我攜家人去壩上草原看戰(zhàn)友 戰(zhàn)友的女兒 也就是照片中這位小天使 六歲的小女孩 乖巧的讓人心痛 我甚至有些...
    土地坡老兵軍哥閱讀 436評論 0 4