第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  去掉值两边的空格