MySQL第六篇------DQL(查询表中数据之基础查询和条件查询 重要)

版权声明:未经本人同意不得转载 https://blog.csdn.net/object_oriented_/article/details/87563098

DQL:查询表数据

单表查询
          查询表中的记录
                      select * from 表名;

     1. 语法:
                 select
                      字段列表
                 from
                     表名列表
                where
                     条件列表
                group by
                     分组字段
                having
                     分组之后的条件
                order by
                      排序
                 limit
                     分页限定

   2. 基本查询
             1). 多个字段的查询,用逗号分隔
                     select  字段名1,字段名2...   from  表名;
                      * 注意:
                                 如果查询所有字段,则可以使用*来替代字段列表。
             2). 去除重复:
                                distinct
             3). 计算列
                               一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
                               ifnull(表达式1,表达式2):null参与的运算,计算结果都为null
                               表达式1:哪个字段需要判断是否为null
                               如果该字段为null后的替换值。
        4). 起别名:
                       as:as也可以省略

基本查询综合案例:  
创建表插入8条数据:

CREATE TABLE stu (
id INT, -- 编号
NAME VARCHAR(20),-- 姓名
age INT,-- 年龄
sex VARCHAR(4),-- 性别
address VARCHAR(100),-- 地址
math INT, -- 数学
english INT -- 英语
);
INSERT INTO stu (id,NAME,age,sex,address,math,english) VALUES (1, '孙悟空',100,
'男','杭州',88,90),(2, '唐僧',100,'男','北京',98,99),(3, '猪八戒',80,'男','四川',78,69),
(4, '沙僧',100,'男','浙江',66,59),(5, '白龙马',29,'男','山东',60,61),(6, '哪吒',16,
'男','陕西',42,20),(7, '龙王',65,'男','天津',56,66),(8, '嫦娥',22,'女','杭州',90,79);

根据以上表做基础查询:
                                 1)查询所有: select * from stu;
                                 2)查询 姓名 和 年龄: select name,age from stu; 
                                              

                                3) 去除重复的结果集(需要保证结果集完全一样)
                                    select distinct address from stu;   去除重复的地址
                                            

                               4)   计算math和english的分数之和 
                                            select name,math,english,math+english  from stu;
                                            
                                  注意 如果有null参与的运算, 计算结果都为null ,解决办法是 用ifnull 判断字段, 如果为null用0替代
                                           格式:  ifnull(字段,替换值)
                                    -- 解决办法 判断可能出错的问题, 如果是null用0代替
                                         SELECT NAME,math,english,math+IFNULL(english,0) FROM stu; 
                                          
                                      4) 起别名  as 可以省略
                                          
                                          


3. 条件查询
                  1). where子句后跟条件
                  2). 比较运算符            

比较运算符 说明
>、 <、 <=、 >=、 =、 <> <>在 SQL 中表示不等于,在 mysql 中也可以使用!=    没有==
BETWEEN...AND 在一个范围之内,如: between 100 and 200
                            相当于条件在 100 到 200 之间,包头又包尾
IN(集合) 集合表示多个值,使用逗号分隔
LIKE '张%' 模糊查询
IS NULL 查询某一列为 NULL 的值,注:不能写=NULL

                   3). 逻辑运算符 

逻辑运算符 说明
and 或 && 与, SQL 中建议使用前者,后者并不通用。
or 或 ||
not 或 !

                4) 占位符:
                                  _:单个任意字符
                                  %:多个任意字符     

综合案例   
-- 查询年龄大于50岁
                SELECT * FROM stu WHERE age > 50;                
                SELECT * FROM stu WHERE age >= 50;          
                

-- 查询年龄等于50岁
        SELECT * FROM stu WHERE age = 50;
                
-- 查询年龄不等于50岁
        SELECT * FROM stu WHERE age != 50;
        SELECT * FROM stu WHERE age <> 50;
                  
-- 查询年龄大于等于20 小于等于50             
        SELECT * FROM stu WHERE age >= 20 && age <=50;
        SELECT * FROM stu WHERE age >= 20 AND age <=50;
        SELECT * FROM stu WHERE age BETWEEN 20 AND 50;
                  
-- 查询年龄22岁,100岁,80岁的信息
        SELECT * FROM stu WHERE age = 22 OR age = 100 OR age = 80
        SELECT * FROM stu WHERE age IN (22,100,80);
                
-- 查询英语成绩为null
        SELECT * FROM stu WHERE english = NULL; -- 不对的。null值不能使用 = (!=) 判断             
        SELECT * FROM stu WHERE english IS NULL;
                              
-- 查询英语成绩不为null
        SELECT * FROM stu WHERE english IS NOT NULL;
                
-- 查询姓孙的有哪些? like
        SELECT * FROM stu WHERE NAME LIKE '孙%';
             

-- 查询姓名第二个字是八的人
        SELECT * FROM stu WHERE NAME LIKE "_八%";
                
-- 查询姓名是3个字的人
        SELECT * FROM stu WHERE NAME LIKE '___';
                
-- 查询姓名中包含僧的人
        SELECT * FROM stu WHERE NAME LIKE '%僧%';
               


                
  

猜你喜欢

转载自blog.csdn.net/object_oriented_/article/details/87563098