SQL--DQL-数据库中的查询操作

DQL:查询表中的记录

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

CREATE TABLE student(id INT,NAME VARCHAR(20),age INT,sex VARCHAR(100),address VARCHAR(100),math INT,english INT);
INSERT INTO student(id,NAME,age,sex,address,math,english) VALUES(1,'马云',55,'男','杭州',66,78),(2,'马化腾',45,'女','深圳',98,87),
(3,'马景涛',55,'男','香港',56,77),(4,'柳',20,'女','湖南',76,65),(5,'柳青',20,'男','湖南',86,NULL),(6,'刘德华',57,'男','香港',99,99),
(7,'马德',22,'女','香港',99,99),(8,'德玛西亚',18,'男','南京',56,65);

2.基础查询
1)多个字段的查询
select 字段名1,字段名2....from 表名;
SELECT id,NAME,address FROM student;
注意:

如果查询所有字段,则可以使用*来替代字段的列表;

2)去重: 必须是查询出来的完全一致
select distinct 字段名1(列名),字段名2 .....from 表名;
SELECT DISTINCT address FROM student;
3)计算列
一般可以使用四则运算计算一些列的值.(一般只会进行数值型的计算)
SELECT NAME,math,english,math+english FROM student;
ifnull(表达式1,表达式2):null参与的运算,计算结果都为null,表达式1 表示哪个字段需要判断是否为null,表达式2表示如果该字段为null后的替换值
SELECT NAME,math,english,math+IFNULL(english,0) FROM student;

4)起别名:

as:as也可以省略
SELECT NAME,math,english,math+IFNULL(english,0) 总分 FROM student;
SELECT NAME,math,english,math+IFNULL(english,0) AS 总分 FROM student;


3.条件查询
1)where 字句后跟条件
2)运算符
     >、<、<=、>=、=、<>(!=)
SELECT * FROM student WHERE age>=20;
SELECT * FROM student WHERE age <>20;
SELECT * FROM student WHERE age <50;

  between ...and
SELECT * FROM student WHERE age>20 AND age <30;
SELECT * FROM student WHERE age BETWEEN 20 AND 30;

in集合)
SELECT * FROM student WHERE age IN (22,18,25);
like 模糊查询
占位符: _:一个任意字符;      %:0个或者多个任意字符
SELECT * FROM student WHERE NAME LIKE '马%';
SELECT * FROM student WHERE NAME LIKE '_化%';
SELECT * FROM student WHERE NAME LIKE '___';
SELECT * FROM student WHERE NAME LIKE '%马%';


is null
SELECT * FROM student WHERE english=NULL; --不对,null不能直接使用=(!=)判断
SELECT * FROM student WHERE english IS NULL;

and 或者 &&
SELECT * FROM student WHERE age>20 AND age <30;
or 或者 ||
SELECT * FROM student  WHERE age=22 OR age=19 OR age=25;
not 或!
SELECT * FROM student WHERE english IS NOT NULL;

#进入内容
1. DQL:查询语句
    1)排序查询
        语法: order by 子句
                    order by 排序字段1 排序字段1,排序字段2,排序方式2.....            
                    
        排序方式:
                    ASC:升序,默认
                    DESC:降序
        注意:
                    如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。

    2)聚合函数:将一列数据作为一个整体,进行纵向的计算。
        count:计算个数
            select count(ifnull(english,0)) from student;
        max:计算最大值
             select max(age) from student;
        min
             select max(age) from student;
        sum
             select max(age) from student;
        avg
             select max(age) from student;        
    注意:聚合函数的计算,排除null 计算(ifnull)
                解决方案:选择非空的列     或者选择 *
    3)分组查询
        1.语法:group by 分组字段;
        2.注意:
            1)分组之后的查询字段:分组字段、聚合函数
            2)where和having的区别?
                1)where 在分组之前进行限定,如果不满足条件将不会进行分组。having在分组之后进行限定,如果不满足结果,咋不会被查询出来
                 2)where 后不可跟聚合函数,having可以进行聚合函数的判断。
        select sex,count(id),avg(math) from student group by sex;
        select sex,avg(math) from student group by sex;
        select sex,avg(math) from student group by sex;   --按照性别分组,分别查询男,女同学的平均分,要求:分数低于70分的人,不参与分组
        select sex,avg(math),count(id) from student where math>70 group by sex having count(id)>2;----按照性别分组,分别查询男,女同学的平均分,要求:分数低于70分的人,不参与分组,分组之后,人数要求大于2
        select sex,avg(math),count(id) person_number from student where math>70 group by sex having person_number>2;  可以对聚合之后的参数起别名  
    4)分页查询
        1. 语法:limit 开始的索引,每页显示的条数
        2.公式:开始的索引= (当前的页码-1)*每页显示的条数
         select * from student limit 0,3;   --第一页
         select * from student limit 3,3;  --第二页
        3.分页操作是一个'方言'
2.约束
3.多表之间的关系
4.范式
5.数据库的备份和还原



全部评论

相关推荐

MingoTree:看不出你你的技术栈,想找什么工作,然后课设项目别写上去了,自我评价删了,前后端你想好你要干啥,这种简历投上去秒挂的
点赞 评论 收藏
分享
01-21 12:26
暨南大学 golang
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务