相对于写操作, 读操作(查询操作)使用的更为频繁, 大部分的业务都体现在读操作上, 内容比较多
我们先学习基本查询

1、基本用法

  1. 查哪张的数据?
  2. 查哪些的数据?
  3. 条件

    语法

  1. SELECT 字段1, 字段2, ...字段n
  2. FROM 表名
  3. [WHERE 条件]

1-1、查询指定字段

示例1—查询指定的列

# 查询t1表中的name和age字段
SELECT `name`, `age` FROM `t1`;

1-2、查询所有的字段

示例2—查询所有的列

# 查询t1表中的所有数据
SELECT * FROM `t1`;
  • * : 表示所有字段

    1-3、条件查询

    示例3—根据条件查询

# 查询xiaomei的年龄
SELECT `age` FROM `t1` WHERE `name`='xiaomei';
# 根据用户名和密码进行查询
SELECT * from user WHERE username='gis' and `password` = '1234'

1-4、 别名

可以给指定的列取一个别名, 一般用于多表查询中

语法

SELECT 字段1 as 别名1, 字段2 as 别名2 FROM 表名 as 表别名

其中, as关键字可以省略

示例

SELECT `name` as `username` FROM `t1` as stu;

演示

2、查询模型

  1. 列当作变量
  2. 列可以参与计算
  3. where条件判断真假

    如何理解

逐行比较, 当where条件为真的时候, 把列(变量)的值取出来

示例

SELECT name, age FROM `student`;

示例2

# 查询本店价比市场价低多少(计算差价)
SELECT market_price - shop_price FROM `goods`;

3、 where条件

MySQL中常用的运算符如下表:

运算符 说明
>, <, <=, >=, =, <> <>表示不等于, 也可以使用!=
BETWEEN…AND 在某个范围内, between 100 and 200, 包含100和200, 闭区间[100, 200]
IN (1,2, … n) 集合表示多个值,使用逗号分隔
LIKE 模糊查询
is null 查询某一列为null
is not null 查询某一列不为null
逻辑运算符 说明
and 或者 && 与, SQL 中建议使用前者,后者并不通用
or 或者 ||
not 或者 !
通配符 说明
% 匹配任意多个字符
_ 匹配一个字符

4、查询案例

goods.sql

以商品表为例, 做如下查询练习

4-1、 查询主键id为32的商品

SELECT * FROM `goods` WHERE `id`=32;

4-2、查询cate_id 不等于3的数据的(id,cate_id,goods_name)这个几个字段

SELECT `id`, `goods_name`, `cate_id`
FROM `goods`
WHERE `cate_id` != 3;

4-3、 本店价格高于3000元的商品(goods_name,shop_price)

SELECT `goods_name`, `shop_price`
FROM `goods`
WHERE `shop_price` > 3000;

4-4、 本店价格低于或等于100元的商品

SELECT `goods_name`, `shop_price`
FROM `goods`
WHERE `shop_price` <= 100;

4-5、 取出第4栏目或第11栏目的商品(使用or或者使用in)

# 使用or
SELECT `goods_name`, `cate_id`
FROM `goods`
WHERE `cate_id`=4 or `cate_id`=11;

# 不使用or
SELECT `goods_name`, `cate_id`
FROM `goods`
WHERE `cate_id` in (4, 11);
select * from goods where cate_id =4 || cate_id =11;

4-6、 取出100<=本店价格<=500的商品(使用and或者between)

# 使用and
SELECT `goods_name`, `shop_price`
FROM `goods`
WHERE `shop_price` >= 100 and `shop_price` <= 500;

# 不使用and
SELECT `goods_name`, `shop_price`
FROM `goods`
WHERE `shop_price` between 100 and 500;

4-7、 取出不属于第3栏目且不属于第11栏目的商品(使用and或使用not in分别实现)

# 使用and
SELECT `goods_name`, `cate_id`
FROM `goods`
WHERE `cate_id` != 3 and `cate_id` != 11;

# 使用 not in
SELECT `goods_name`, `cate_id`
FROM `goods`
WHERE `cate_id` not in (3, 11);

4-8、 取出第3个栏目下面价格<1000或>3000,并且点击量>5的商品

SELECT `goods_name`, `cate_id`, `shop_price`, `click_count`
FROM `goods`
WHERE `cate_id`=3
and (`shop_price` < 1000 or `shop_price` > 3000)
and `click_count` > 5;

4-9、 取出名字以”诺基亚”开头的商品

SELECT `goods_name`
FROM `goods`
WHERE `goods_name` LIKE '诺基亚%';

4-10、 取出名字为”诺基亚Nxx”的手机

SELECT `goods_name`
FROM `goods`
WHERE `goods_name` LIKE '诺基亚N__';

模糊查询like

%代表 零个,一个或多个字符
_代表 匹配一个字符
like 'qq%'   以qq开头
like '%qq'   以qq结尾
like '%qq%' 包含x
like  'x_'  以x开头,后面只有一个字符
like  '_x'  以x结尾,前面只有一个字符