1. 在使用%匹配的时候,不能匹配null值.
2. 对于计算字段,在数据库完成的速度比在应用程序完成的快。
3. trim():去掉字符两端的空格。ltrim()|rtrim():去掉两端空格。
4. MySql中连接:contact(var1,var2)
5. select now():返回当前日期.
6. MySql 取子串:substring(str,pos):pos表示位置,从1开始,包含pos,到字符串最后.
substring(str,pos,len):从pos开始,共取出len 位.
7. left(str,len):取出左边的len个字符|right(str,len):取出右边的len个字符
8. SELECT cust_name, cust_contact
FROM Customers
WHERE SOUNDEX(cust_contact) = SOUNDEX('Michael Green');//根据发音来过滤.
9. Mysql 可以使用year()函数从日期中提取年份.
10. avg(distinct row_name):只对不同值的进行计算.
11. group by:
1).group by子句中列出的每一列都必须是检索列或有效的表达式.
2).如果分组列中包含具有NULL值的行,则NULL将作为一个分组返回。如果列中有多行NULL值,它们将分为一组.
SELECT cust_id, COUNT(*) AS orders
FROM Orders
GROUP BY cust_id
HAVING COUNT(*) >= 2;
按照cust_id进行分组,然后再对其进行统计出现的次数,最后过滤次数大于2的.
12. HAVING 的功能和where的类似,只是having可以用在聚集函数中进行过滤.
sql语句的顺序:select ->from->where->group by->having->order by
13. 作为计算字段使用子查询:
SELECT cust_name, cust_state,
(SELECT COUNT(*)
FROM Orders
WHERE Orders.cust_id = Customers.cust_id) AS orders
FROM Customers
14. 内联接(等值联接): 必须是包含满足条件的行.
标准格式语法:
SELECT vend_name, prod_name, prod_price
FROM Vendors INNER JOIN Products
ON Vendors.vend_id = Products.vend_id;
简单等值语法:
SELECT cust_name, cust_contact
FROM Customers, Orders, OrderItems
WHERE Customers.cust_id = Orders.cust_id
AND OrderItems.order_num = Orders.order_num
AND prod_id = 'RGAN01';//两种方式均可.
15. 外链接:需要查询包含没有关联行的那些行.
1).左外联接:将左表全部查询出来.
SELECT Customers.cust_id, Orders.order_num
FROM Customers LEFT OUTER JOIN Orders
ON Customers.cust_id = Orders.cust_id;
2).右外联接:将右表全部查询出来.
16. UNION:可以将两个select查询的结果组合到一起(和where的作用差不多),多数好的DBMS使用内部查询优化程序,
在处理各条SELECT语句前组合它们。理论上讲,这意味着从性能上看使用多条WHERE子句条件还是UNION应该没有实际的差别。
注意: UNION必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔
(因此,如果组合四条SELECT语句,将要使用三个UNION关键字)。
UNION中的每个查询必须包含相同的列、表达式或聚集函数(不过,各个列不需要以相同的次序列出)。
列数据类型必须兼容:类型不必完全相同,但必须是DBMS可以隐含转换的类型
(例如,不同的数值类型或不同的日期类型)。
Union会自动删除掉重复的结果行,如果不想删掉重复的行,可以使用UNION ALL.
17. Insert SELECT :将查询的结果插入到另外一个表里面去:
insert into customers(id,name)
select id,name from orders
18. select into :将一个表的数据复制到另外一个表中(DB2不支持)
select * into customerCopy from customers//将会创建一个customerCopy表,
并且将查询到的数据全部导入到创建的表中.如果只想导入某几列,则具体列出来即可.
不管从多少表中检索数据,最终都只能导入到一个表中.
19. ifnull(exp1,exp2): 如果exp1的值为null,则使用exp2的值,否则使用exp1的值。
SQL
最新推荐文章于 2024-08-23 14:40:17 发布