日期:2014-05-16  浏览次数:20839 次

mysql查询语句学习

?

1.关于distinct的使用

? ? 查询名字不重复的语句:

?

select distinct name from table 

? ? 但是我们要把id字段信息也取到

?

select distinct name,id from table 
?

??? 这样查询的结果是把id和name值同时重复的去掉,和只查询名字不重复的意愿违背,怎么解决呢?解决方法如下:

select *, count(distinct name) from table group by name 


2.关于join的使用

join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。

JOIN: 如果表中有至少一个匹配,则返回行 
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行 
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行 
FULL JOIN: 只要其中一个表中存在匹配,就返回行 

SQL INNER JOIN 关键字
在表中存在至少一个匹配时,INNER JOIN 关键字返回行。
INNER JOIN 关键字语法
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2 
ON table_name1.column_name=table_name2.column_name
注释:INNER JOIN 与 JOIN 是相同的。

SQL LEFT JOIN 关键字
LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。

LEFT JOIN 关键字语法
SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2 
ON table_name1.column_name=table_name2.column_name

SQL RIGHT JOIN 关键字
RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。

RIGHT JOIN 关键字语法
SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2 
ON table_name1.column_name=table_name2.column_name
注释:在某些数据库中, RIGHT JOIN 称为 RIGHT OUTER JOIN。


SQL FULL JOIN 关键字
只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。

FULL JOIN 关键字语法
SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2 
ON table_name1.column_name=table_name2.column_name
注释:在某些数据库中, FULL JOIN 称为 FULL OUTER JOIN。

3.mysqlDate函数

??? http://www.w3school.com.cn/sql/sql_dates.asp

?

4.mysql IFNULL()和COALESCE()函数

??? 把值为NUll的设置为:0

SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products

SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
?

?

5.mysql GROUP_CONCAT()函数

??? group_concat()函数可以用来拼接字符串

??? group_concat(str)默认以逗号拼接

??? group_concat(str SEPARATOR'_')下划线拼接

?

SELECT GROUP_CONCAT(IFNULL(city,'城市未定义') SEPARATOR'_') as citys FROM persons

?

6.CONCAT()和CONCAT_WS()函数

??? concat()函数 直接拼接 有一个是NULL结果就为NULL

??? concat_ws() 以特定符合隔开 ,而且第一是特定符号,有NULL值不影响拼接结果

SELECT CONCAT('My', 'QL',NULL);
SELECT CONCAT_WS(',','乐自游',NULL,'杭州旅游')

?

7.having的使用

??? 在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。

?

SELECT city, sum(age) FROM persons  WHERE city='杭州' or city='苏州' GROUP BY city HAVING SUM(age)<40

?

8.mid的使用

??? MID 函数用于从文本字段中提取字符。

?

??? 我们拥有下面这个 "Persons" 表:

Id LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

?? 现在,我们希望从 "City" 列中提取前 3 个字符。

?? 我们使用如下 SQL 语句:

SELEC