sql: count, order by, join
LIKE
为了在搜索子句中使用通配符,必须使用LIKE操作符
⚠️通配符搜索只能用于文本字段(字符串),对于非文本数据类型不能使用通配符搜索。
通配符出现在中间:
SELECT prod_name FROM Products WHERE prod_name LIKE 'F%y' -- 找出F开头y结尾的数据
⚠️:百分号%能够匹配任意位置的0个、1个或者多个字符,但是不能匹配NULL
下划线_
下划线通配符的用途和百分号类似,但是它只能匹配一个字符,百分号是匹配多个字符,这是二者的区别。
SELECT prod_id, prod_name FROM Products WHERE prod_name LIKE '__ inch teddy bear' -- 前面是两个下划线_ -- 结果 prod_id prod_name ------- --------- BR02 12 inch teddy bear -- 12或者18刚好是两个字符 BR03 18 inch teddy bear
方括号[]
方括号[]通配符用来指定一个字符集,它必须匹配指定位置的一个字符。
SELECT cust_contact FROM Customers WHERE cust_contact LIKE '[JM]%' -- 匹配JM当中一个字母开头,后面是任意字符的内容 ORDER BY cust_contact
- [JM]:匹配其中一个字符
%:匹配任意内容
取反字符^
使用取反符号^来否定内容:
SELECT cust_contact FROM Customers WHERE cust_contact LIKE '[^JM]%' -- 匹配不是JM开头的任意内容 ORDER BY cust_contact;
使用NOT操作符可以得到类似上面的结果:
SELECT cust_contact FROM Customers WHERE NOT cust_contact LIKE '[JM]%' -- 匹配不是JM开头的任意内容;NOT表示取反,否定内容 ORDER BY cust_contact;
通配符使用技巧
⚠️通配符使用的几点注意事项:
- 不要过度使用通配符
- 如果确实需要使用通配符,尽可能不要将它们放在搜索模式的开始位置。通配符处于开始处,搜索是最慢的。
FULL JOIN
FULL JOIN 关键字会从左表 (Persons) 和右表 (Orders) 那里返回所有的行。如果 "Persons" 中的行在表 "Orders" 中没有匹配,或者如果 "Orders" 中的行在表 "Persons" 中没有匹配,这些行同样会列出。
"Persons" 表:
| Id_P | LastName | FirstName | Address | City |
|---|---|---|---|---|
| 1 | Adams | John | Oxford Street | London |
| 2 | Bush | George | Fifth Avenue | New York |
| 3 | Carter | Thomas | Changan Street | Beijing |
"Orders" 表:
| Id_O | OrderNo | Id_P |
|---|---|---|
| 1 | 77895 | 3 |
| 2 | 44678 | 3 |
| 3 | 22456 | 1 |
| 4 | 24562 | 1 |
| 5 | 34764 | 65 |
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons FULL JOIN Orders ON Persons.Id_P=Orders.Id_P ORDER BY Persons.LastName
| LastName | FirstName | OrderNo |
|---|---|---|
| Adams | John | 22456 |
| Adams | John | 24562 |
| Carter | Thomas | 77895 |
| Carter | Thomas | 44678 |
| Bush | George | |
| 34764 |
Order By
以逆字母顺序显示公司名称,并以数字顺序显示顺序号:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
COUNT
COUNT(*) 函数返回表中的记录数
SELECT COUNT(*) FROM table_name
COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入)
SELECT COUNT(column_name) FROM table_name
COUNT(DISTINCT column_name) 函数返回指定列的不同值的数目
SELECT COUNT(DISTINCT column_name) FROM table_name

浙公网安备 33010602011771号