基本查詢數據庫
去除重複記錄 >SELECT DISTINCT vend_id FROM products;函數
分頁 >SELECT * FROM products LIMIT 5;性能
>SELECT * FROM products LIMIT 0,5;ui
>SELECT * FROM products LIMIT 5,5;spa
排序(降序) >SELECT * FROM products ORDER BY prod_price DESC;排序
排序(升序) >SELECT * FROM products ORDER BY prod_price [ASC];事務
多列排序 >SELECT * FROM products ORDER BY prod_price ASC,prod_name ASC;內存
過濾查詢 查詢產品價格在2到10之間的產品字符串
>SELECT * FROM products WHERE prod_price >= 2 AND prod_price <= 10;產品
>SELECT * FROM products WHERE prod_price BETWEEN 2 AND 10;
查詢產品價格不等於2.5的全部產品
>SELECT * FROM products WHERE prod_price <> 2.5; >SELECT * FROM products WHERE prod_price != 2.5;
查詢沒有電子郵件信息的客戶
>SELECT * FROM customers WHERE cust_email IS NULL;
查詢有電子郵件信息的客戶
>SELECT * FROM customers WHERE cust_email IS NOT NULL;
過濾查詢
查詢由供應商1001和1003製造而且價格在10元以上的產品
>SELECT * FROM products WHERE vend_id = '1001' OR vend_id = '1003' AND prod_price > 10;
>SELECT * FROM products WHERE (vend_id = '1001' OR vend_id = '1003') AND prod_price > 10;
>SELECT * FROM products WHERE vend_id IN('1001','1003') AND prod_price > 10;
查詢不是由供應商1001和1003製造的產品
> SELECT * FROM products WHERE vend_id NOT IN(‘1001’,‘1003’) ;
模糊查詢
「_」通配符表明一個字符 「%」通配符表明0個或一個或任意多個字符 查詢產品名稱中以jet開頭的產品
> SELECT * FROM products WHERE prod_name LIKE 'jet%';
查詢_ ton anvil產品
> SELECT * FROM products WHERE prod_name LIKE '_ ton anvil'
• 不要過分使用LIKE通配符,若是其餘操做符能夠完成就使用其餘操做符
• 通配符搜索使用的時間比其餘搜索的時間長
• 若是確實須要使用通配符,除非絕對有必要,不然不要把通配符放到WHERE子句的開始處,把通配 符放到搜索模式的開始處,搜索起來是最慢的
更多基本查詢
列的別名
> SELECT vend_id AS '供應商編號' FROM products;
算數運算
>SELECT quantity,item_price,quantity * item_price AS '總價' FROM orderitems;
文本處理函數
left()返回左邊指定長度的字符
> SELECT prod_name,LEFT(prod_name,2) FROM products;
right()返回右邊指定長度的字符
>SELECT prod_name,RIGHT(prod_name,5) FROM products;
length()返回字符串的長度
> SELECT prod_name,LENGTH(prod_name) FROM products;
lower()將字符串轉換爲小寫
> SELECT prod_name,LOWER(prod_name) FROM products;
upper()將字符串轉換爲大寫
> SELECT prod_name,UPPER(prod_name) FROM products;
文本處理函數
ltrim()去掉字符串左邊的空格
> SELECT prod_name,LTRIM(prod_name) FROM products;
rtrim()去掉串右邊的空格
>SELECT prod_name,RTRIM(prod_name) FROM products;
trim()去掉左右兩邊的空格
>SELECT prod_name,TRIM(prod_name) FROM products;
字符串鏈接
>SELECT CONCAT('I love ',cust_name) AS 'Message' FROM customers;
日期時間函數
函數 | 用途 | 函數 | 用途 |
curDate() | 返回當前日期 | curTime() | 返回當前時間 |
now() | 返回當前日期和時間 | date() | 返回日期時間的的日期部分 |
time() | 返回日期時間的時間部分 | day() | 返回日期的天數部分 |
dayofweek() | 返回一個日期對應星期數 | hour() | 返回時間的小時部分 |
minute() | 返回時間的分鐘部分 | month() | 返回日期的月份部分 |
second() | 返回時間的秒部分 | year() | 返回日期的年份部分 |
datediff() | 計算兩個日期之差 | addDate() | 添加一個日期(天數) |
日期和時間函數
獲取2005-9-1日的訂單
>SELECT * FROM orders WHERE order_date = '2005-09-01';
>SELECT * FROM orders WHERE DATE(order_date) = '2005-09-01';
獲取2005年9月的訂單
>SELECT * FROM orders WHERE order_date >= '2005-09-01' AND order_date <= '2005-09-30';
>SELECT * FROM orders WHERE YEAR(order_date) = '2005' AND MONTH(order_date) = '9';
聚合函數 • min() • max() • count() • sum() • avg() 聚合函數經常使用於統計數據使用 聚合函數統計時忽略值爲NULL的記錄
聚合函數
查詢商品價格最高的產品
> SELECT MAX(prod_price) FROM products;
查詢商品價格最低的產品
> SELECT MIN(prod_price) FROM products;
查詢商品價格總和
> SELECT SUM(prod_price) FROM products;
查詢商品平均價格
> SELECT AVG(prod_price) FROM products;
查詢客戶數量
>SELECT COUNT(*) FROM customers;
>SELECT COUNT(cust_email) FROM customers;
分組統計
獲取每一個供應商提供的產品數量
> SELECT vend_id,COUNT(*) FROM products GROUP BY vend_id;
獲取提供產品數量大於2的供應商
> SELECT vend_id,COUNT(*) FROM products GROUP BY vend_id HAVING COUNT(*) > 2;
HAVING語句用於GROUP BY的過濾 WHERE用於分組前過濾
獲取產品提供產品數量大於等於2併產品價格大於10的供應商
> SELECT vend_id,COUNT(*) FROM products WHERE prod_price > 10 GROUP BY vend_id HAVING COUNT(*) >= 2;
查詢語句順序 1. SELECT 2. FROM 3. WHERE 4. GROUP BY 5. HAVING 6. ORDER BY 7. LIMIT
子查詢
子查詢指的是嵌套在查詢中的查詢
獲取訂購商品編號爲TNT2的客戶名
1.從訂單詳情表中獲取訂單編號:
> SELECT order_num FROM orderitems WHERE prod_id = "TNT2";
2.根據訂單編號獲取下訂單的客戶ID:
> SELECT cust_id FROM orders WHERE order_num IN ('20005','20007');
3.根據客戶ID獲取客戶的姓名:
> SELECT cust_name FROM customers WHERE cust_id IN ('10001','10004');
子查詢
SELECT cust_name FROM customers WHERE cust_id IN (SELECT cust_id FROM orders WHERE order_num IN(SELECT order_num FROM orderitems WHERE prod_id = "TNT2") );
子查詢
獲取每一個客戶下的訂單數量
> SELECT cust_id,cust_name, (SELECT COUNT(*) FROM orders WHERE orders.cust_id = customers.cust_id) FROM customers;
等值查詢 > SELECT ts.id AS 'stuid',stu_name,tc.id AS 'class_id',class_name FROM t_student AS ts,t_class AS tc WHERE ts.class_id = tc.id 內聯接查詢 > SELECT ts.id AS 'stuid',stu_name,tc.id AS 'class_id',class_name FROM t_student AS ts INNER JOIN t_class AS tc ON ts.class_id = tc.id
左(外)聯接查詢
> SELECT ts.id AS 'stuid',stu_name,tc.id AS 'class_id',class_name FROM t_student AS ts LEFT JOIN t_class AS tc ON ts.class_id = tc.id
右(外)聯接查詢
>SELECT ts.id AS 'stuid',stu_name,tc.id AS 'class_id',class_name FROM t_student AS ts RIGHT JOIN t_class AS tc ON ts.class_id = tc.id
組合查詢
查詢全部的用戶和公司,並在一個結果集中顯示
> SELECT id,name,createtime FROM t_user UNION SELECT id,name,createtime FROM t_company;
組合查詢
查詢全部的用戶和公司,並在一個結果集中按照建立時間(createtime)降序顯示
> select id,name,createtime from t_user union select id,name,createtime from t_company order by createtime desc;
組合查詢
• union必須由兩條或兩條以上的select語句組成,語句之間使用union分割
• union的每一個查詢必須包含相同的列,表達式或聚合函數
• 列的數據類型必須兼容:類型沒必要徹底相同,可是必須是相互能夠轉換的
• union查詢會自動去除重複的行,若是不須要此特性,可使用union all
• 對union結果進行排序,order by語句必須在最後一條select語句以後
>SELECT vend_id FROM vendors UNION ALL SELECT vend_id FROM products;
數據庫引擎: • InnoDB:可靠的事務處理引擎,不支持全文搜索 • MyISAM:是一個性能極高的引擎,支持全文搜索,但不支持事務處理 • MEMORY:功能等同於MyISAM引擎,但因爲數據存儲在內存中,因此速度快 > create table xxx ( … )engine=innodb;
根據查詢記錄添加到表: >insert into t_tableb(val) select val from t_tablea;