SQL(Structured Query Language)學習筆記 [TOC] Terminal登錄資料庫 1.登錄 2.顯示所有資料庫 3.使用資料庫 4.顯示資料庫中所有表 5.刪除表 SQL特性 SQL約束 1.主鍵 1. 2. 2.外鍵 3.唯一 4.檢查 SQL索引 觸發器 SQL優化執 ...
SQL(Structured Query Language)學習筆記
[TOC]
Terminal登錄資料庫
1.登錄mysql -u root -p ;
2.顯示所有資料庫show databases ;
3.使用資料庫use “database name” ;
4.顯示資料庫中所有表 show tables;
5.刪除表 drop table ”Customers“;
SQL特性
SQL約束
1.主鍵
CREATE TABLE OrderItems ( order_num int NOT NULL PRIMARY KEY, order_item int NOT NULL , prod_id char(10) NOT NULL , quantity int NOT NULL , item_price decimal(8,2) NOT NULL );
ALTER TABLE Orders ADD PRIMARY KEY (order_num);
2.外鍵
3.唯一
4.檢查
SQL索引
觸發器
SQL優化執行計劃
索引唯一掃描(index unique scan)
索引範圍掃描(index range scan)
索引全掃描(index full scan)
索引快速掃描(index fast full scan)
檢索數據
1.多條SQL語句必須以分號(;);
2.SQL語句不區分大小寫;
3.select distinct vend_id from products;
返回不同的值
destinct
作用於所有的列
4.限制結果數量,分頁
①Oracle rownum
②MySQL limit
select * from limit m,n
m是指m+1條開始,取n條
排序檢索數據
1.order by
①select prod_name from products order by prod_name
②select prod_id , prod_price ,prod_name from products order by prod_price,prod_name;
③select prod_id , prod_price ,prod_name from products order by 2,3;
2.order by desc(降序排列)
select prod_id , prod_price ,prod_name from products order by prod_price desc;
desc致應用到直接位於其前面的列名
預設是升序排列
過濾數據(字元需要用'' 數值不需要'')
1.bwtween and
2.is null
3.and,or,in,not
通配符過濾數據
1.必須是用 like 操作符 ,通配符只能用於文本欄位
2.% (%不匹配 null)
3._
4.[]
拼接欄位(||)
1.select concat(vend_name , '(',vend_country,')') from vendors order by vend_name;
拼接欄位,查詢的結果沒有列名
2.alias 別名 Oracle中沒有as
select concat(vend_name , '(',vend_country,')') as vene_title from vendors order by vend_name;
3.計算
select prod_id , quantity , item_price , quantity* item_price as expanded_price from orderitems where order_num=20008;
SQL函數
1.聚集函數
函數 | 說明 |
---|---|
AVG() | 返回某列的平均值 |
COUNT() | 返回某列的行數 |
MAX() | 返回某列的最大值 |
MIN() | 返回某列的最小值 |
SUM() | 返回某列值之和 |
**count(*) 對錶中的行的數目進行計數 不忽略為null的行
Count(column)對特定的列中具有值的行進行計數**
分組
1.group by
2.having
where 過濾行 having過濾分組
where在數據分組前進行過濾,having在數據分組後進行過濾
select執行順序
select from where---->group by--->having--->order by
子查詢
作為子查詢的select語句只能查詢單個列
select cust_name ,cust_state ,(select count(*) from orders where orders.cust_id=customers.cust_id) as orders from customers order by cust_name;
聯結
等值聯結/內聯結
select vend_name , prod_name ,prod_price from vendors , products where vendors.vend_id=products.vend_id ;
select vend_name , prod_name ,prod_price from vendors INNER join products on vendors.vend_id=products.vend_id ;
笛卡爾積 叉聯結
自聯結
自然聯結
外聯結
1.左外聯結
select customers.cust_id ,orders.order_num from customers left outer join orders on customers.cust_id=orders.cust_id;
2.右外聯結
select customers.cust_id ,orders.order_num from customers right outer join orders on orders.cust_id=customers.cust_id;
組合查詢
UNION
select cust_name ,cust_contact ,cust_email from customers where cust_state in ('IL','IN','MI') union select cust_name ,cust_contact ,cust_email from customers where cust_name='Fun4A11';
規則:
1.UNION必須由2條以上的select語句組成
2.UNION的每個查詢必須包含相同的列