1. 程式人生 > 其它 >sql個人總結(部分)

sql個人總結(部分)

mysql資料庫

1,資料庫的好處

1.1實現資料持久化。

1.2使用完整的管理系統統一管理易於查詢。

2,DQL語言

2.1基礎查詢 進階1

語法:

select 查詢列表 from 表名;

 

去重:select distinct name from student

拼接:select concat(name,age,sex) from student

查詢多個列表:select name,age,sex from student

特點:

1,查詢列表可以是:表中的欄位,常量值,表示式,函式。

2,查詢的表格是一個虛擬的表格。

2.2條件查詢 進階2

語法:

select 查詢列表 from 表名 where 篩選條件;

 

分類: 1,按條件表示式篩選

條件運算子:> < = != <>(不等) >= <=

2,按邏輯表示式篩選

&& ||

and or not

3,模糊查詢

like

between and

in

is null

2.3排序查詢 進階3

語法:

select 查詢列表 from 表名 where 篩選條件 order by 排序列表 【asc|desc】

 

特點:1,asc代表升序,desc代表降序。如果不寫預設升序。

 

2.4常見函式 進階4

概念:類似於Java的方法,將一組邏輯語句封裝在方法體中,對外暴露方法名

好處:1,隱藏了實現細節 2提高程式碼的重用性

呼叫:select 函式名(實參列表) from

特點: 1.叫什麼(函式名)

2.幹什麼(函式功能)

分類: 1,單行函式

concat,length,ifnul等

2,分組函式

功能:做統計使用,又稱為統計函式,聚合函式,組函式

單行函式分類 一:

字元函:length concat substr instr trim upper lower lpad rpad replace。

數學函式:round ceil floor truncate mod。

日期函式:new curdate curtime year month monthname day hour minute second

str_to_date date_forma。

其他函式:version database user。

流程控制函式:if case。

 

2.5分組查詢 進階5

語法:

select 分組函式,列(要求出現在group by的後面)

from

【where 篩選條件】

group by 分組的列表

【order by 子句】

注意:查詢列表必須特殊,要求是分組函式和group by後出現的欄位

 

2.6連線查詢 進階6

含義:又稱多表查詢,當查詢的欄位來於多個表時,就會用到連線查詢

笛卡爾乘積現象:表1 有m行,表2 有n行,結果=m*n行

發生原因:沒有有效的連線條件

如何避免:新增有效的連線條件

 

分類:

按年代分類:

sql92標準:僅僅支援內連線

sql99標準【推薦】

sql99語法:

語法:

select 查詢列表

from 表1 別名 【連線型別】

join 表2 別名

on 連線條件

【where 篩選條件】

【group by 分組】

【order by 排序列表】

按功能分類:

內連線:等值連線,非等值連線,自連線

外連線:左外連線,右外連線,全外連線

交叉連線

2.7子查詢 進階7

含義:

出現在其他語句中的select語句,稱為子查詢或內查詢

外部的查詢語句,稱為主查詢或外查詢

分類:

按子查詢出現的位置:

select後面

from後面

where或having後面

exists後面(相關子查詢)

按結果集的行列數不同:

標量子查詢(結果集只有一行一列)

列子查詢(結果集只有一列多行)

行子查詢(結果集有一行多列)

表子查詢(結果集一般為多多列)

 

2.8分頁查詢 進階8

應用場景:當要顯示的資料,一頁顯示不全,需要分頁提交sql請求

語法:

select 查詢列表

from

【join type join 表2】

【on 連線條件】

【where 篩選條件】

【group by 分組欄位】

【having 分組後的篩選】

【order by 排序的欄位】

limit 【offset】,size;

offset 要顯示條目的啟始索引(起始索引從0開始)

size 要顯示1的條目個數

2.9聯合查詢 進階9

union 聯合 合併:將多條查詢語句的結果合併成一個結果

語法:

select * from user (查詢語句一)

union

select * from student (查詢語句二)

union

......

 

應用場景:

要查詢的結果來自多個表,並且多個表沒有直接的連線關係,但查詢的資訊一致時

 

特點:

1,要求多條查詢語句的查詢列數一致的。

2,要求多條查詢語句列數是一致的。

3,union關鍵字預設去重,如果使用union all可以包含重複項。

3,DML語言

資料操作語言:

插入:insert

修改:update

刪除:delete

 

1,插入語句(表名 列名 新值)

語法:

方式一:

insert into 表名(列名...) values(值1...);

 

方式二:

insert into 表名 set 列名=值,列名=值,...

 

1,方式一支援插入多行,方式二不支援。

2,方式一支援子查詢,方式二不支援。

2,修改語句

修改單表的資料:

語法:

update 表名 set 列=新值,列=新值,...where 篩選條件;

3,刪除語句

刪除單表的資料:

方式一:delete

語法:

delete from 表名 where 篩選條件

方式二:truncate

語法:

truncate table 表名(刪除表 不能新增篩選條件)

 

delete和truncate的區別

1,delete可以加 where 條件,truncate不能加

3,假如要刪除的表中有自增長列,

如果用delete刪除後,再插入資料,自增長列的值從斷點開始。

而truncate刪除沒有返回值,delete刪除有返回值。

4,DDL資料定義語言

庫和表的管理

一,庫的管理

建立,修改,刪除

二,表的管理

建立,修改,刪除

 

建立:create

修改:alter

刪除:drop

1,庫的管理

1.1庫的建立

語法:

create database 庫名;

1.2庫的刪除

drop database if exists 表名

 

2,表的管理

2.1表的建立

語法:

create table 表名(

列名 列的型別【(長度)約束】,

列名 列的型別【(長度)約束】,

。。。。。。

列名 列的型別【(長度)約束】,

2,2表的修改

alter table 表名 add|drop|modify|change column 列名 【列型別 約束】;

 

2.2.1:修改列名

alter table 表名 change column 舊列名 新列名 列型別;

 

2.2.2:修改列的型別或約束

alter table 表名 modify column 型別或約束;

 

2.2.3:新增新列

alter table 表名 add column 列名 列型別;

 

2.2.4:刪除列

alter table 表名 drop column 列名;

 

2.2.5:修改表名

alter table 表名 rename to 表名;

 

2.2.6表的刪除

drop table 表名;

 

3,約束

常見約束:

含義:一種限制,用於1限制表中的資料,為了保證表中的資料的準確性和可靠性。

新增約束的時機:

1,建立表時

2,修改表時

約束的新增分類:

1,列級約束

六大約束語法上都支援,但外來鍵約束沒有效果

2,表級約束

除了非空,預設,其他的都支援

分類: 六大約束:

1,not null:非空約束, (用於保證該欄位的值不能為空)

如:學號 姓名等。

2,default:預設約束 , (用於保證該欄位有預設值)

如:性別。

3,primary key:主鍵約束, (用於保證該欄位的值具有唯一性,並且為空)

如:學號,員工工號等。

4,unique:唯一約束, (用於保證該欄位的值具有唯一性,可以為空)

如:座位號。

5,check:檢查約束【mysql中不支援】

如:年齡,性別。

6,foreign key外來鍵約束,用於限制兩個表的關係的,用於保證該欄位的值必須來自主表的關聯列的值。在從表新增外來鍵約束,用於引用主表中某列的值。

如:學生表的專業編號,員工表的部門編號等。