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