本博各个词的作用只做一个简单的介绍,以及作用,并不深入,使用的数据库MYSQL;
在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。关键词 distinct用于返回唯一不同的值。
distinct :
1.可以作用于单列
2.也可以作用于多列
当作用于多列时 select distinct name, id from test;
实际上是根据name和id两个字段来去重的,这种方式QL Server支持,
select distinct name, id from test;
返回的结果为多行,这说明distinct并非是对name和id两列“字符串拼接”后再去重的,而是分别作用于了name和id列。
3.distinct 必修放在开头处
select name, distinct,id from test; 会报错,因为distinct必须放在开头!!!
4.count统计
select count(distinct name) from test; --表中name去重后的数目
count是不能统计多个字段的,下面的SQL在Mysql无法运行。
select count(distinct name, id) from test;
若想使用,请使用嵌套查询,如下:
select count(*) from (SELECT DISTINCT Depart from Tests) AS T;
SQL BETWEEN 操作符
1.BETWEEN 操作符在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围。
如果想查询两个数据范围之外的的数据,请使用NOT操作符
SQL in 操作符
IN 操作符允许我们在 WHERE 子句中规定多个值
SELECT * FROM score WHERE degree IN(85,86,88); 查询 Score表中 degree的值为85,86或88的数据
SQL order by用法
实现方式:
1.asc 升序,可以省略,是数据库默认的排序方式
2.desc 降序,跟升序相反。
最后要注意order by的原则,写在最前面的字段,他的优先级最高,也就是写法中第一个的字段名1的优先级最高,优先执行他的内容。
以Class降序查询Student表的所有记录。
select * from student ORDER BY class desc;
以Cno升序、Degree降序查询Score表的所有记录。
SELECT * FROM score ORDER BY cno ASC ,degree DESC;
SQL AVG 函数
AVG 函数返回数值列的平均值。NULL 值不包括在计算中。
SQL AVG() 语法
SELECT AVG(column_name) FROM table_name
我们希望计算 "OrderPrice" 字段的平均值。
我们使用如下 SQL 语句:
SELECT AVG(OrderPrice) AS OrderAverage FROM Orders
得到下面的结果集:
我们希望找到 OrderPrice 值高于 OrderPrice 平均值的客户。
我们使用如下 SQL 语句:
SELECT Customer FROM Orders
WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)
结果集类似与下面:
SQL IN 操作符
IN 操作符
IN 操作符允许我们在 WHERE 子句中规定多个值。
SQL IN 语法
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...)
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 |
IN 操作符实例
现在,我们希望从上表中选取姓氏为 Adams 和 Carter 的人:
我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE LastName IN (‘Adams‘,‘Carter‘)
结果集:
Id | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Adams | John | Oxford Street | London |
3 | Carter | Thomas | Changan Street | Beijing |
ANY,ALL ,SOME的用法
准备两个表:
test(add,addd)
test2(o,t,t,f)
ANY,SOME 父查询中的结果集大于子查询中任意一个结果集中的值,则为真
SELECT * FROM test2 WHERE N>ANY(SELECT N FROM test)
SELECT * FROM test2 WHERE N>SOME(SELECT N FROM test)
ALL,ANY,SOME 的子查询
ALL 父查询中的结果集大于子查询中每一个结果集中的值,则为真
SELECT * FROM test2 WHERE N>ALL (SELECT N FROM test)
ANY 与子查询IN相同
SELECT * FROM test2 WHERE N=ANY (SELECT N FROM test)
SELECT * FROM test2 WHERE N IN (SELECT N FROM test)
NOT IN
AND作用 父查询中的结果集不等于子查询中任意一个结果集中的值,则为真
SELECT * FROM test2 WHERE N NOT IN(SELECT * FROM test)
<>ANY 与NOT IN
<>ANY
OR作用 父查询中的结果集不等于子查询中的a或者b或者c,则为真
SELECT * FROM test2 WHERE N <>ANY(SELECT * FROM test)