第1章 检索数据
SELECT、DISTINCT、LIMIT语句
SELECT 列
FROM 表;
SELECT name
FROM products; # 检索单个列
- MySQL必须以分号结束SQL语句,不区分大小写;
- 输出数据顺序或许不同,正常情况。
SELECT prod_id,prod_name,prod_price
FROM products; #检索多个列
- 列名之间加逗号,最后一个列名不加
SELECT *
FROM products; #检索所有列
SELECT DISTINCT vend_id
FROM products; #只返回不同(唯一)的行
- DISTINCT 必须直接放在列名的前面;
- DISTINCT 应用于所有列而不仅是前置它的列。
SELECT prod_name
FROM products
LIMIT 5; #限制语句,返回不多于5行
SELECT prod_name
FROM products
LIMIT 4,5; # 返回从第4行开始的5行
- 行0 检索出来的第一行为行为行0;
- 行数不够时只返回它能返回的行。
SELECT products.prod_name
FROM crashcourse.products; #使用完全限定的表名
第2章 排序检索数据
ORDER BY语句
SELECT prod_name
FROM products
ORDER BY prod_name; #按字母升序(A-Z)排列
SELECT prod_name
FROM products
ORDER BY prod_name DESC; #按字母降序排列
SELECT prod_id,prod_price,prod_name
FROM products
ORDER BY prod_price,prod_name;#按多个列升序排列
SELECT prod_id,prod_price,prod_name
FROM products
ORDER BY prod_price DESC,prod_name #按价格降序,名称升序排列
- DESC只应用到直接位于其前面的列名;
- 在多个列上降序排序,需对每列指定DESC关键字;
- ASC表示升序,默认;
- A与a默认相同,取决于数据库设置。
SELECT prod_price
FROM products
ORDER BY prod_price
LIMIT 1; #最小价格
- ORDER BY 和 LIMIT 组合使用,找出最值(想要取得值);
- ORDER BY 需位于FROM语句后,LIMIT 需位于 ORDER BY 语句后。
第3章 过滤语句
WHERE语句
SELECT prod_name,prod_price
FROM products
WHERE prod_price=2.50;
SELECT prod_name,prod_price
FROM products
WHERE prod_name='fuses';
--单引号用来限定字符串
SELECT prod_name,prod_price
FROM products
WHERE prod_price<=10;
SELECT prod_name,prod_price
FROM products
WHERE prod_price BETWEEN 5 AND 10;
SELECT vend_id,prod_price
FROM products
WHERE vend_id <> 1003; #不匹配检查,!=同表示不等于
SELECT cust_id
FROM customers
WHERE cust_mail IS NULL;#空值
用法: 在where字句后面, 可以有若干个符号, 用来拼接一个条件
= : 相等比较, 相当于Java中的==
!= <> : 不等比较
> >= < <= : 大小比较
and or not : 与、或、非
between...and...: 在指定范围内,[]
in(set) : 在某个集合中包含
not in(set) : 没有在某个集合中包含
is null : 判断为空
is not null : 判断不为空
- ORDER BY 需位于 WHERE语句后;
- MySQL不区分大小写。
第4章 数据过滤
AND、OR、IN操作符
SELECT prod_id,prod_name,prod_price
FROM products
WHERE vend_id=1003 AND prod_price>=10; #检索匹配同时满足条件
SELECT prod_id,prod_name,prod_price
FROM products
WHERE vend_id=1002 OR vend_id=1003;#检索匹配满足任意条件
SELECT prod_id,prod_name,prod_price
FROM products
WHERE vend_id=1002 OR vend_id=1003 AND prod_price>=10;
-- 处理 OR之前,优先处理AND操作符
-- 使用圆括号消除歧义
SELECT prod_id,prod_name,prod_price
FROM products
WHERE (vend_id=1002 OR vend_id=1003) AND prod_price>=10;
SELECT prod_name,prod_price
FROM products
WHERE vend_id IN (1002,1003)
ORDER BY prod_name;
-- IN,圆括号,逗号分隔
--MySQL中支持 NOT 对IN、BETWEEN、EXISTS子句取反
SELECT prod_name,prod_price
FROM products
WHERE vend_id NOT IN (1002,1003)
ORDER BY prod_name;
第5章 用通配符过滤(模糊查询)
LIKE操作符–百分号(%)、下划线(_)通配符
# _ : 通配符, 匹配一位的任意内容
# % : 通配符, 匹配任意位的任意内容
# 关键字 like
SELECT prod_id,prod_name
FROM products
WHERE prod_name like '%Qinn%';
SELECT prod_id,prod_name
FROM products
WHERE prod_name like '_Qinn';
第6章 用正则表达式进行搜索
REGEXP
- LIKE匹配整个列
- REGEXP在列值内进行匹配,后跟正则表达式
SELECT prod_name
FROM product
WHERE prod_name REGEXP BINARY 'J.000' # . 匹配任意一个字符,BINARY 区分大小写
ORDER BY prod_name;
SELECT prod_name
FROM product
WHERE prod_name REGEXP '1000|2000' # |进行OR匹配
ORDER BY prod_name;
SELECT prod_name
FROM product
WHERE prod_name REGEXP '[1-5] Ton' # []、-定义一个范围
ORDER BY prod_name;
空白元字符
\\. 查找.
\\- 查找-
\\f 换页
\\n 换行
\\r 回车
\\t 制表
\\v 纵向制表
……
第7章 创建计算字段
Concat函数
SELECT Concat(RTrim (vend_name),'(',RTrim(vend_country),')') AS vend_name #拼接函数
FROM vendors
ORDER BY vend_name;
- Concat()拼接函数
- RTrim 去掉值右边的空格
- LTrim 去掉值左边的空格
- Trim 去掉值两边的空格