7.数据库-查-单表查询

7 .数据库-查-单表查询

因为查询有很多分支 所以分 单表查询 和 多表查询:

  1. 简单查询

1.1 SELECT语句

在MySQl中查询语句 最基本就是SELECT语句了,可以用不用的条件来查询表中的数据,SELECT语句的语法格式如下:

SELECT [ DISTINCT ] *|字段名1,字段名1,字段名1,…

FROM 表名

[ WHERE 条件表达式1 ]

[GROUP BY 字段名 [ HAVBING 条件表达式2 ] ]

[ORDER BY 字段名 [ ASC | DESC ] ]

[LIMIT [OFFSET] 记录数 ]

从上面的格式可以知道 这查询也是个比较卡手的东西啊!!所以分支出来讲.

我们先讲解SELECT语句的部分意思都是什么啊 这对于我们记忆很好:

1. SELECT [ DISTINCT ] *|字段名1,字段名1,字段名1,…

表示查询指定的字段,星号(*)表示表中全部字段,任选其一! DISTINCT是可选的,代表取出结果集中重复的数据。

  1. FROM 表名 表示冲指定的表中查询数据
  2. WHERE 条件表达式1  WHERE是可选参数,用于指定查询条件
  3. GROUP BY 字段名 [ HAVBING 条件表达式2 ] GROUP BY是可选的 表示按照指定字段进行分组,HAVBING 也是可选的 用于对分组后的结果进行过滤。
  4. ORDER BY 字段名 [ ASC | DESC ] 也是可选的 用于按照指定的字段进行排序,排序方法是ASC 或 DESC 控制,ASC是升序 DESC是降序 ,不指定的话默认ASC 升序
  5. LIMIT [OFFSET] 记录数  是可选的 用于限制查询结果的数量,下标从0开始.

SELECT语句还蛮复杂的,接下来我们一点点拆开来讲:

1.2查询所有字段

两种方式 : 一种傻乎乎把全部字段打出来查询 一种直接用通配符*号查:

首先tb_bihu表中有这么多记录:

id

name

sex

age

1

hgy

1

18

2

hjy

0

19

3

zhangsan

1

20

4

shabi

1

22

5

wolong

1

20

6

fengchu

0

20

7

xiaohong

0

10

8

bihu

1

18

9

hanhan

0

19

10

hanpi

1

20

1)   傻呼呼打的方式:

SELECT id,name,sex,age FROM tb_bihu;

2)直接*号查询:

SELECT * FROM tb_bihu;

1.3 查询指定的字段数据

语法:

SELECT 字段1,字段2,字段3,… FROM 表名;

例: 查询 名字 对应的 性别:

SELECT name,sex FROM tb_bihu;

2.按照条件查询

2.1带关系运算符的查询

SELECT语句中 最常见就是用WHERE子句来查询条件对数据的过滤了,语法格式:

SELECT 字段名1,字段名2,…

FROM 表名

WHERE 条件表达式

上面中 WHERE条件表达式中用的到运算符:

     =       等于

    <>       不等于。注释:在 SQL 的一些版本中,该操作符可被写成 !=

    >          大于

    <          小于

    >=       大于等于

<=       小于等于

这是部分的啊 还有很多其他的呢

 

 

例:查询tb_bihu 表中 id为4的name 和 age 字段数据:

SELECT name,age FROM tb_bihu WHERE id = 4;

2.2带IN 关键字的查询

用于 WHERE表达式中:

IN关键字判断某个字段是否在指定集合中 如果字段在集合中 则满足条件,这个字段所在的记录也会被查询出来:

语法:

SELECT …  WHERE 字段名 [ NOT ] IN (元素1,元素2,…)

其中:元素1 和 元素2 代表的是 集合中的元素  如果字段名 在集合中 那么条件WHERE为真

例:查询tb_bihu表中 age 为 17、18、19 岁的人:

SELECT * FROM tb_bihu WHERE age IN (17,18,19);

那么可选关键字 NOT 是代表 可以查询字段不在集合汇总的全部记录数据:

例:查询tb_bihu表中 age 不为 17、18、19 岁的人:

SELECT * FROM tb_bihu WHERE age NOT IN (17,18,19);

即除了 17 、 18 、 19 岁的人 其他都打印出来了。 即:带 NOT关键字的是相反的.

2.3 带BETWEEN AND 关键字的查询

BETWEEN AND 关键字用于判断某个字段的值书都在指定的范围之内,如果在的话 就满足,在范围内的数据都会被查询出来,如果不在的话 就不会被查询出来。

语法格式:

SELECT …  WHERE 字段名 [ NOT ] BETWEEN 值1 AND 值2

值1代表范围条件的起始值,值2代表范围条件的结束值,NOT是可选的,意思是查询不在这个范围内的所有记录(反之)。 但是要注意 值1 大于 值2 的话 是会查询不到记录的!

例: 查询id 从2 – 5 之间的记录条件:

SELECT * FROM tb_bihu WHERE id BETWEEN 2 AND 5;

2     hjy   0     19

3     zhangsan      1     20

4     shabi      1     22

5     wolong   1     20

如果你写个带NOT的:

SELECT * FROM tb_bihu WHERE id NOT BETWEEN 2 AND 5;

其他自己测试。

2.4 空值查询

在数据表中,某些列的值可能为空值 (NULL) ,空值不是0 啊 也不是空字符串啊!

在MYSQl中 用 IS NULL 关键字来判断字段的值是否为空值,语法格式:

SELECT …  WHERE 字段名 IS [NOT] NULL

NOT是可选的 带上 NOT的话 那么判断的就是不是空值的字段

例:查询tb_bihu这个表中 字段sex 的值 为NULL的记录:

SELECT * FROM tb_bihu WHERE sex IS NULL;

那么不是查询 sex 字段不为空的记录:

SELECT * FROM tb_bihu WHERE sex IS NOT NULL;

记住 这个 NOT 要放 IS 和 NULL 的中间  记住即可!

2.5 带DISTINCT关键字的查询

很多表中存在某些字段重复的值,那么过滤掉这些值,只显示一条,我们可以这样:

语法格式:

SELECT DISTINCT 字段名 FROM 表名;

例: 在tb_bihu这个表中查询 sex 性别 值 ,但 查询结果不重复:

SELECT DISTINCT sex FROM tb_bihu ;

不仅如此 我们还可以查询多个字段不重复 甚至可以 全部(*):

注意: 这里多个字段不重复是指 多个字段都一样时才只会显示一个!

例: 在tb_bihu这个表中查询 sex 和 age 的值 ,但 查询结果不重复:

SELECT DISTINCT sex, age FROM tb_bihu;

2.6 带LIKE关键字的查询(配合 通配符)

使用关键字 = 号 可以判断两个字符串是否相等 但有时候要对字符串进行模糊查询,那么LIKE关键字就上场了,LIKE关键字能判断两个字符串是否相匹配,语法格式如下:

SELECT … WHERE 字段名 [ NOT ] LIKE ‘匹配字符串’;

其中:

NOT 是可选的 表示寻找那些 字段的值 不喝 匹配字符串一致的 记录.

例: 在tb_bihu表的 age 年龄 为 20岁的全部人记录:

       SELECT * FROM tb_bihu WHERE age LIKE '20';

例: 在tb_bihu表的 age 年龄 不为 20岁的全部人记录:

       SELECT * FROM tb_bihu WHERE age NOT LIKE '20';

所以 LIKE不仅用于 字符串 也可以其他的类型 但是还是用于字符串比较合适!!

通配符 LIKE 搭配 通配符查询:

1)      百分号 % 通配符

匹配任意长度的字符串、包括空字符串(长度0)。 例如: “c%” 会匹配出 c c1 cc 反正就是c开头

例:在tb_bihu表的 name 名字 以 h开头的全部记录:

SELECT * FROM tb_bihu WHERE name LIKE 'h%';

例2:在tb_bihu表的 name 名字 以 h开头 以y 结尾 的全部记录:

SELECT * FROM tb_bihu WHERE name LIKE 'h%y';

例3:在tb_bihu表的 name 名字 包含 y 的全部记录:

SELECT * FROM tb_bihu WHERE name LIKE '%y%';

             

2)      下划线 _ 通配符

下划线通配符 和 百分号通配符不同,下划线通配符只匹配单个字符,要匹配多个字符要多个下划线,而且下划线通配符一定存在一个字符。

例: 查询tb_bihu表中name字段,以h开头y结尾 但是之间一定只有一个字符的记录:

SELECT * FROM tb_bihu WHERE name LIKE 'h_y';

多学一招:

因为通配符 % 和 _ 是字符 , 如果在查询中要用的到百分号 或 下划线 ,那么我们用转义字符: \% 和 \_ 进行转义即可。

例如: 查询tb_bihu这个表中 name字段带有%号的记录:

SELECT * FROM tb_bihu WHERE name LIKE '%\%%';

其他自己测试即可。

2.7 带 AND 关键字的多条件查询语句

在查询数据时 为了让查询更准确,这里添加了多条件查询 ,那就是AND关键字了:

他可以连接两个及以上条件的联合查询,只有都满足的结果才能被返回。

语法格式:

SELECT … WHERE 条件表达式1 AND 条件表达式2 [… AND 条件表达式n ];

冲上面的语法可知: 有很多个条件表达式 每个条件表达式用AND分隔开。

例:查询tb_bihu表中 id 小于5 且 是男孩子的记录:

SELECT * FROM tb_bihu WHERE id < 5 AND sex = 1;

这里的1值得是男孩子  0 指的是女孩子。

例2:查询tb_bihu表中 id 是 1,2,4,6之一且性别是女且名字是以h开头y结尾的记录:

SELECT * FROM tb_bihu WHERE id IN (1,2,4,6) AND sex = 0 AND name LIKE 'h%y';

2.8 带OR关键字的多条件查询

OR 一样可以用于多条件查询 但是和AND不一样,OR 是 满足其中一条就被查询出来:

语法格式:

SELECT … WHERE 条件表达式1 OR条件表达式2 [… OR条件表达式n ];

例: 查询tb_bihu这个表中,年龄小于20岁 或 是性别是男的人:

SELECT * FROM tb_bihu WHERE age < 20 OR sex = 1;

多学一招

OR 和  AND 关键字可以在一起用,但是有个优先级的问题需要解决:

AND 的优先级明显是比 OR 高的! 所以两者在一起用的时候 ,会先运行算 AND ,再运算OR表达式。

例:在yb_bihu表中查询 性别女或者性别为男且年龄为19岁的人:

SELECT * FROM tb_bihu WHERE sex = 0 OR sex = 1 AND age = 19;  

所以呢 他查询的结果是:

  1. 性别是女的
  2. 性别是男的且年龄是19的!

本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/14819583.html

原文地址:https://www.cnblogs.com/bi-hu/p/14819583.html