• 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

  • 相关阅读:
    BZOJ3899 仙人掌树的同构(圆方树+哈希)
    BZOJ3590 SNOI2013Quare(状压dp)
    BZOJ2178 圆的面积并(simpson积分)
    BZOJ3724 PA2014Final Krolestwo(欧拉回路+构造)
    BZOJ3589 动态树(树链剖分+容斥原理)
    BZOJ3453 XLkxc(拉格朗日插值)
    BZOJ4650 NOI2016优秀的拆分(后缀数组)
    Luogu5058 ZJOI2004嗅探器(割点)
    shutil模块---文件,文件夹复制、删除、压缩等处理
    面向过程---通过查找字符串,找到相应的文件路径
  • 原文地址:https://www.cnblogs.com/bi-hu/p/14819583.html
Copyright © 2020-2023  润新知