sql的關鍵字


整理一下sql的關鍵字,一直都在用,只是很少去整理,所以今天簡單整理一下,主要是整理CRUD的一些關鍵字。
寫在前面:sql 不區分大小寫

select 簡單查詢語句

select columnName from tableName where condition group by columnName having condition order by columnName desc asc limit 1;

需要注意說明:當同時含有where子句、group by 子句 、having子句及聚集函數時,執行順序如下:
    執行where子句查找符合條件的數據;
    使用group by 子句對數據進行分組;對group by 子句形成的組運行聚集函數計算每一組的值;最后用having 子句去掉不符合條件的組。
    having 子句中的每一個元素也必須出現在select列表中。有些數據庫例外,如oracle.
    having子句和where子句都可以用來設定限制條件以使查詢結果滿足一定的條件限制。
    having子句限制的是組,而不是行。where子句中不能使用聚集函數,而having子句中可以。
where在分組前過濾,having在分組后過濾
having字段必須是查詢出來的,where字段必須是數據表存在的。
where 不可以使用字段的別名,having 可以。因為執行WHERE代碼時,可能尚未確定列值。

涉及到的關鍵字:

  • distinct:對查詢列進行去重,也可以用在聚合函數中。
  • and:用於並列查詢條件,左右兩邊的條件同時滿足時才為真。例如:查詢姓名為jason並且年齡為22的學生信息。 select * from student as s where s.name='jason' and s.age=22;
  • or:也用於查詢條件,只要滿足了左右兩邊條件中的一個即可,例如:查詢姓名為jason或者年齡為22的學生信息。 select * from student as s where s.name='jason' or s.age=22;
  • not:表示對查詢條件取反,通常和in,between..and..搭配使用。
  • between..and.. 或者 not between..and.. :用於查詢條件,通常為符合某個區間的數值或者日期。
  • in 或者 not in:用於查詢條件,表示只要查詢的列滿足其中的一個即可(not in 相反),例如:查詢id為1,2,3的學生信息。select * from student as s where s.id in(1,2,3);
  • is null 或者 is not null:用於查詢條件,判斷某個字段列是否為空值(is not null 相反),例如:查詢姓名不為空的學生信息。select * from student as s where s.name is not null;
  • like 或者 not like 后接通配符:用於查詢條件,通常和 %(0或者多個),_(一個)通配符搭配使用,例如:查詢姓名為j開頭的學生信息。select * from student as s where s.name like 'j%';
  • exists 或者 not exists:用於查詢條件,主要是用於判斷某個結果是否存在於表中,如果存在則為true,否則為false。數據量很大時適合使用,而in當數據量很大時則不太適用。
  • as:用於為列或者表起別名,也可以使用空格為列或者表起別名,不建議混用。
  • *:表示查詢表中符合條件的所有字段信息。
  • with: 常常與as連用,將查詢到的結果暫時存儲到一張虛表當中,然后再做操作。后面必須緊跟使用這個虛表的sql語句。with就是一個sql片段,供后面的sql語句引用。
    詳情參見:https://www.cnblogs.com/Niko12230/p/5945133.html
    例如:with a as (SELECT * FROM table_a);
    select * from a;
  • `>,<,=,<>,!=:分別表示大於,小於,等於,不等於。
  • union(去重)/union all(不去重):可以將一個或多個 SELECT 語句的結果連接組合成一個結果集,但是必須列類型和列的個數要一致。
    例如:將學生姓名為jason的學生和學生愛好為聽歌的學生查詢出來(例子不恰當)
    select s.id,s.name,s.addr from student as s where s.name='jason'
    union all
    select d.id,d.name,d.addr from student as d where d.hobby='listen song';
  • intersect/intersect all(交運算,all不去重):表示獲取兩個查詢sql結果的交集。
    類似:
    select s.id,s.name,s.addr from student as s where s.name='jason'
    intersect all
    select d.id,d.name,d.addr from student as d where d.hobby='listen song';
  • except/except all(差運算,all不去重):表示獲取兩個查詢sql結果的差集。

sql多表查詢語句

  • inner join on :表示內連接(內連接可用where替換)
    例如:查詢a表中在b表中存在id為1的數據信息
    select * from a inner join b on a.id=b.id and a.id=1;
    可以使用where子句替換為:select * from a,b where a.id=b.id and a.id=1;
    有些情況下,可以使用連接來替代子查詢。因為使用join,MySQL不需要在內存中創建臨時表。

  • left join on(左外連接):表示左外連接
    例如:查詢a表中在b表中存在姓名j開頭的數據信息(例子不恰當)
    select a.name,b.sex from a left join b on a.id=b.id and a.name like 'j%';
    它的含義是即使b表中沒有與a表中匹配的數據信息,a表中的數據信息都會全部查詢出來。
    left join on 后跟and和where區別
    (1)ON條件是在生成臨時表時使用的條件,它不管ON中的條件是否為真,都會返回左邊表中的記錄;
    (2)WHERE條件是在臨時表生成好后,再對臨時表進行過濾的條件。這時已經沒有LEFT JOIN的含義(必須 返回左邊表的記錄)了,條件不為真的就全部過濾掉;
    (3)AND 是過濾之后再連接,WHERE是連接之后再過濾。
    (4)而inner jion沒這個特殊性,則條件放在on中和where中,返回的結果集是相同的。

  • right join on(右外連接):表示右外連接
    select a.name,b.sex from a right join b on a.id=b.id and a.name like 'j%';
    它的含義與左外連接相反。

  • full join(全連接):即使數據沒有在兩張表中同時存在,也要返回行。
    select a.name,b.sex from a full join b on a.id=b.id and a.name like 'j%';

sql插入語句

insert into tablename(column) values(value);
插入語句有四種方式,單個值插入,多個值插入,全部插入,條件插入

第一種情況插入指定字段
insert into table_name(column1,column2)values(value1,value2);
第二種情況插入所有字段:前提條件是字段順序必須與表中字段順序一致
insert into table_name values(value1,value2);
第三種情況批量插入數據
insert into table_name values (value1,value2),(value1,value2);
也可以指定插入批量數據
insert into table_name(column1,column2) values(value1,value2),(value1,value2);
第四種情況就是當滿足了指定條件時才插入數據
insert into table_name(column1,column2) select value1,value2 from table_name where ...
也就是后面select子句中查詢出來的列作為前面的值插入到表中,但是這個列的個數要和前面的字段個數一致。select子句就可以隨便寫了。
例如
insert into dept(deptno,dname,loc) select 11,dept.dname,dept.loc from dept where deptno=22;

sql刪除語句

delete from tablename where condition;

sql更新語句

update tablename set column=value where condition;

sql更改表結構

alter table ..add(添加屬性)
alter table..drop(刪除屬性)

sql刪除表

drop table
刪除表(不可恢復):truncate

sql常見函數

  • avg():表示求平均值
  • min():表示求最小值
  • max():表示求最大值
  • sum():表示求和
  • count():表示計數統計


免責聲明!

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



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