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外來鍵約束,用於限制兩個表的關係的,用於保證該欄位的值必須來自主表的關聯列的值。在從表新增外來鍵約束,用於引用主表中某列的值。
如:學生表的專業編號,員工表的部門編號等。