SQL基础技能学习(一)SELECT 检索语句
一、查找类
1、简单操作:select可直接进行检验
(1)检索单列:
select prod_name(列名)FROM product(表名);
(2)检索多列:
select prod_name,prod_id(列名)FROM product(表名);
(3)检索所有列:
select *(列名)FROM product(表名);
2、加强版操作
(4)检索只显示列中的不同值:
SELCECT DISTINCT vend_id(列名)FROM product;
注:distinct关键字应用于所有列而非部分,例如SELECT DISTINCT vend_id,prod_price,除非指定的两个列都不同,否则所有行都将被检索出来
(5)限制结果:限制行数——limit子句
select prod_name(列名)FROM product(表名)
LIMIT 5(行数);
注:- limit 1,将检索出第二行而不是第一行;
-当行数不够的时候,返回只有的行数;
- limit 4 offset 3从行3开始取4行;
二、排序检索——SELECT+ORDER BY
(1)单列排序
select prod_name(列名)
FROM product(表名)
ORDER BY prod_name(排序);
注:使用非选择列进行排序也是可以的。
(2)多列排序
select prod_name(列名)
FROM product(表名)
ORDER BY prod_name、prod_id(排序);
(3)指定排序方向:默认方向为升序,DESC降序
ORDER BY prod_name DESC(降序排序);
注:DESC只应用到直接前面的列名,所以想对多个列上进行降序排序,需要对每个列指定DESC关键字。
三、过滤数据SELECT+where
(1)单一条件操作符
字符串形式的操作符需要加单引号:WHERE name= ’solar’
检查空值:WHERE price is NULL;
(2)组合操作符:AND和OR【AND优先级更高】
- AND:每增加一个条件就需要多使用一个AND
WHERE vend_id=1003 and prod_name <> ‘DES’;
- OR:检索任一条件
WHERE vend_id=1003 and prod_name <> ‘DES’;
-组合:关键部分需要加括号
WHER(E vend_id=1003 OR population!=1000) AND prod_name <> ‘DES’;
- IN:条件范围,作用同OR
WHERE vend_id IN(500,1000);——选取的是id为500和1000的记录
- NOT:条件范围,与IN联用取反集
WHERE vend_id NOT IN(500,1000);——选取的是id非500和1000的记录
四、过滤数据SELECT+LIKE
1、百分号通配符
SELECT prod_id,prod_name
FROM products
WHERE prod_id LIKE ‘%se%’;
注:%可以匹配0个字符,但对于尾空格无法识别。
2、下划线_通配符:只匹配单个字符
WHERE prod_id LIKE ‘_se%’;
3、通配符花费时间比较长尽量适当运用。
五、正则表达式进行搜索:REGEXP
1、REGEXP ’.XXXX’——.匹配任意一个字符
SELECT prod_id,prod_name
FROM products
WHERE prod_id REGEXP ‘.123’;寻找id=x123的字符串
2、REGEXP ’xx|xx’——OR匹配
SELECT prod_id,prod_name
FROM products
WHERE prod_id REGEXP ‘1123|3212’;——寻找id=1123或3212的字符串
3、REGEXP ’[xx xx]xx’——匹配字符串之一
SELECT prod_id,prod_name
FROM products
WHERE prod_name REGEXP ‘[123]TON’——比or寻找多字段好用
4、REGEXP ’[x-x]xx’——匹配范围
SELECT prod_id,prod_name
FROM products
WHERE prod_name REGEXP ‘[1-3]TON’
5、REGEXP ’\\特殊字符’——匹配特殊字符
6、匹配字符类
二、计算类
1、拼接:Concat,各个串之间用逗号分隔
注:多数DBMS用+或||实现拼接,Concat是mysql专享的
2、使用别名:AS关键词链接
3、计算:可以通过加减乘除进行基础运算。
三、函数类
(1)SOUNDEX——将任何文本字串转化为字母数字模式的算法,找谐音
2、日期和时间处理函数——常见筛选手段
(1)注:DATE(order_date)=2005-09-01与WHERE order_date=2005-09-01的不同是:
WHERE order_date=2005-09-01默认筛选为2005-09-01 00:00:00的字段;——列值
而date是匹配2005-09-01的字段;——列
(2)查询某一月份的值:可以用Year()+Month()来进行定位
3、数值处理函数:在各大DBMS中均相同
4、汇总-聚集函数:SELCET可组合聚集函数
注:聚集函数不能直接出现在where子句中,必须与having子句或select子查询
(1)AVG函数
可用返回所有列的平均值,也可返回特定列或行的平均值
(2)Count()计数函数
对于符合特定条件的行数进行计数,有两种方式:
- COUNT(*):对于所有行进行计数
- COUNT(column):对于特定列中具有值的进行计数,忽略null
(3)Max()、Min()函数:需要指定列名
(4)SUM()求和函数:须指定列名
可以直接对指定列进行求和或者对于计算值进行求和
SUM(price*quantity) =>总订单数额
(5)DISTINCT筛选不同值:必须使用列名
只能使用count(distinct price)而非count(distinct)
Group by+count组合起来才能计算次数
四、分组数据:group by和having子语句
(1)group by必须在where之后,order by之前
(2)Having子语句≈where子语句,但是where过滤行,having过滤分组
(3)Select子句排序
五、连接表:join
(1)基本联接:一定不要忘记where子句,起到配对的作用
① 等值链接可以取多个链接进行
②INNER JOIN /OUTER JOIN均与ON联结
(2)高级链接
① 表别名:简化SQL语句,允许SELECT单条语句多次使用相同表
注:表别名只适用于查询,不能返回客户机
② 自联结:在一定程度上是子查询的更优选择
③ 自然联结:排除重复现象,每一列只返回一次
使用通配符SELECT *来进行明确联结
④ 外部联结:包含相关表中没有联结行的行
例如:列出所有产品及订购数量,包含那些没有订单的客户
包括左外部联结(LEFT OUTER JOIN)、右外部联结(RIGHT OUTER JOIN)
⑤ 带聚集函数的联结:比如说count()