《Mysql實例Mysql 聚合函數(shù),內(nèi)外連接 , 視圖 ,索引,觸發(fā)器, 存儲過程》要點:
本文介紹了Mysql實例Mysql 聚合函數(shù),內(nèi)外連接 , 視圖 ,索引,觸發(fā)器, 存儲過程,希望對您有用。如果有疑問,可以聯(lián)系我們。
導讀:Mysql 聚合函數(shù),內(nèi)外連接 , 視圖 ,索引,觸發(fā)器, 存儲過程聚集函數(shù)-count語法:select count(*)|count(列名) from 表名 [where...
Mysql? 聚合函數(shù),內(nèi)外連接 ,? 視圖 ,索引,觸發(fā)器, 存儲過程
聚集函數(shù)-count
語法:
select count(*)|count(列名) from 表名 [where 條件]
例子:
select count(*) '人數(shù)' from studentScore where score>80;
說明:
Count(列名)返回某一列,行的總數(shù)
聚集函數(shù)——sum(列名)?? 算數(shù)值的和
語法:
select sum(列名) from 表名 [where 條件]
例子:
select sum(score) from studentscore where score>80;
說明:
Sum函數(shù)返回滿足where條件的行的和? 如果不寫where 算全表的對應(yīng)列的和
聚集函數(shù)——avg(列名)?? 算數(shù)值的平均值
語法:
select avg(列名) from 表名 [where 條件]
例子:
select avg(score) from studentscore where score>80;
說明:
avg函數(shù)返回滿足where條件的行的平均值? 如果不寫where 算全表的對應(yīng)列的平均值
聚集函數(shù)——max(列名)/min(列名)
語法:
select max(列名) from 表名 [where 條件]
select min(列名) from 表名 [where 條件]
例子:
select max(score) from studentscore where score>80;
select min(score) from studentscore where score>80;
說明:
max/min函數(shù)返回滿足where條件的行的最大/最小值 如果不寫where 算全表的對應(yīng)列的最大/最小值
使用group by 子句對列進行分組
SELECT column1, column2,column3.. FROM table [where 條件];
group by column having ...
說明?
having 只能出現(xiàn)在 group by 后面?
作用:having 子句 對分組結(jié)果進行過濾
ORDER BY 子句應(yīng)位于SELECT語句的結(jié)尾.
小結(jié):
小結(jié) select 語句 : S-F-W-G-H-O 組合 select ... from ... where ... group by... having... order by ... ; 順序不能改變 !!!
外鍵約束:(必須要現(xiàn)有主表? ,才能添加外鍵約束)
關(guān)鍵字:
foreign key
語法:
邊建表邊添加約束
create table 表名(
字段名 類型 約束,
foreign key(本表字段) references 主表名(字段(主鍵))
);
后期添加約束
alter table 子表名 add foreign key(本表字段) references 主表名(字段(主鍵));
多表設(shè)計中三種實體關(guān)系
一對一關(guān)系(身份證對人)
一對多關(guān)系(商品類別對應(yīng)商品信息)
多對多關(guān)系(老師對應(yīng)學生,用戶對應(yīng)權(quán)限)
多表查詢:
內(nèi)連接:
兩張或兩張以上的表進行等值連接? 提取出來信息
寫法一:
select * from a inner join b on a.id=b.id;
寫法二:
select * from a,b where a.id = b.id;
左外連接
說明:
以left關(guān)鍵字左邊的表 為基本表和右邊的表進行匹配? 如果右邊的表有引用字段的值 返回該值,沒有以null填充
語法:
select * from a left join b on a.id=b.id;
右外連接
說明:
以right關(guān)鍵字右邊的表 為基本表和左邊的表進行匹配? 如果左邊的表有引用字段的值 返回該值,沒有以null填充
語法:
select * from a right join b on a.id=b.id;
子查詢:
就是在正常的查詢語句中? 嵌套一個或多個select查詢語句
語法:
select * from table_name where col =|in|not in|!= (select col from table_name where col = 條件)
子查詢主要注意:
括號查詢中出來的結(jié)果? 如果返回的是多行的值? 使用 in 或 not in
返回的是一個值,你可以使用 in/=..
建議不要嵌套超過三層.(超過三層效率會降低)
子查詢查詢的效率低于連接查詢
總結(jié)sql語句:
SQL 語句對大小寫不敏感
SQL 語句可以寫成一行或多行
關(guān)鍵字不能簡寫或分開折行
子句通常放在不同的行
縮進用于增強可讀性
總結(jié)優(yōu)先規(guī)則;
求值循序:
算數(shù)運算符
連字操作
比較操作
is [not] null/like/[not] in
[not] between
not 邏輯條件
and 邏輯條件
or 邏輯條件
注意:使用括號來控制順序
聯(lián)合查詢(合并查詢)
使用union關(guān)鍵字
語法:
select *|col from table_name [where][...];
union
select *|col from table_name1 [where][...];
注意:
要查詢出來的列要相同才能使用union關(guān)鍵字進行聯(lián)合查詢
連接查詢和子查詢技術(shù)!
1.內(nèi)聯(lián)接查詢:inner join
2.外聯(lián)接查詢:left/rigth
3.使用表的別名
4.聯(lián)合查詢:union
5.子查詢
分頁查詢(Limit關(guān)鍵字使用)
sqlserver?
select Top 5 * from student;
mysql
select * from student Limit 5;?
返回前五行數(shù)據(jù)(虛擬表)
select * from student Limit 5,2;
返回前除了五行數(shù)據(jù)以外的兩行數(shù)據(jù)(虛擬表)
數(shù)據(jù)庫的幾種技術(shù):
視圖:為不同的角色顯示不同的信息
為什么用視圖?
限制數(shù)據(jù)訪問
使得復(fù)雜的查詢?nèi)菀?br>
提供數(shù)據(jù)的獨立性
表現(xiàn)相同數(shù)據(jù)的不同觀察
注意:
查詢語句有相同列名? 應(yīng)該起別名? 才不會報錯
創(chuàng)建視圖:create view 視圖的名字 as 查詢語句
修改視圖:create or replace view 視圖名字 as 查詢語句
刪除視圖:drop view 視圖名字;
使用視圖:select * from 視圖名字;
查看當前數(shù)據(jù)庫的所有視圖:show table status where comment='VIEW';
索引:什么是索引?
提高查詢效率的一種技術(shù)、手段
目的:提高查詢的效率
設(shè)計原則:
1.選擇惟一性索引
2.為經(jīng)常需要排序、分組和聯(lián)合操作的字段建立索引
3.為常作為查詢條件的字段建立索引
4.限制索引的數(shù)目
5.盡量使用數(shù)據(jù)量少的索引
6.盡量使用前綴來索引
7.刪除不再使用或者很少使用的索引
創(chuàng)建索引的語法:
create index 索引的名字 on 表名(列名);
刪除索引的語法:
DROP INDEX 索引的名字 ON 表名;
觸發(fā)器
什么是觸發(fā)器:由一個事件(insert,delete,update)觸發(fā)了另一個事件
當數(shù)據(jù)庫系統(tǒng)執(zhí)行這些事件時,就會激活觸發(fā)器執(zhí)行相應(yīng)的操作.
MySQL從5.0.2版本開始支持觸發(fā)器
如何創(chuàng)建一個觸發(fā)器:
delimiter $$
create trigger 觸發(fā)器的名字 before insert/update/delete on 表名 for each row
begin
//觸發(fā)的事件
end $$
delimiter ;
刪除觸發(fā)器:
DROP TRIGGER 觸發(fā)器名字;
存儲過程:一些列sql語句的集合(預(yù)編譯sql語句)
創(chuàng)建的語法:
create procedure 名字(參數(shù)列表<輸入?yún)?shù),輸出參數(shù)>)
begin
//sql語句
end
例子:
DELIMITER $$
CREATE PROCEDURE pro_calcu
(
???? IN number1 INT,
???? IN number2 INT,
???? OUT result DOUBLE
)
BEGIN
IF(number1 IS NOT NULL AND number2 IS NOT NULL) THEN
IF(number2<>0) THEN
SET result=number1/number2;
ELSE
SET result=0;
END IF;
ELSE
SET result=0;
END IF;
END $$
DELIMITER ;
使用存儲過程;
call 存儲過程名稱(..)? 如果有參數(shù)? 括號中要放入對應(yīng)參數(shù) 有返回值? 要使用@名(定義out 后的名稱)來接收
向控制臺輸出:
select @result as '別名';
事務(wù):要么這個整體都提交,要么都回滾
如何使用事物:
在存儲過程中使用
create procedure 名字(參數(shù)列表<輸入?yún)?shù),輸出參數(shù)>)
begin
start transaction;-- 開啟事務(wù)
//sql語句
if(沒有問題)then
commit;
else
rollback;
end if;
end
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/5787.html