首页 > 其他分享 >基本的DQL语句-单表查询

基本的DQL语句-单表查询

时间:2024-07-20 19:00:44浏览次数:17  
标签:语句 -- score 单表 student sid DQL where select

一、DQL语言

        DQL(Data Query Language 数据查询语言)。用途是查询数据库数据,如SELECT语句。是SQL语句 中最核心、最重要的语句,也是使用频率最高的语句。其中,可以根据表的结构和关系分为单表查询和多 表联查。

注意:所有的查询都会得到一张虚拟的表

二.单表查询

        针对数据库中的一张数据表进行查询,可以通过各 种查询条件和方式去做相关的优化。

1.查询语句语法规则 

SELECT [DISTINCT]
{*|表1.*|[ 表1.字段1 [as 字段别名1]
[, 表1.字段2[as 字段别名2]][, …]]}
FROM 表1 [ as 表别名 ]
[ left|right|inner join 表2 on 表之间
的关系 ]
[ WHERE ]
[ GROUP BY ] 
[ HAVING]
[ ORDER BY]
[ LIMIT {[ 位置偏移量,] 行数 }] ; 
DISTINCT 设定DISTINCT可以去掉重复记录。
AS 表名或者字段名过长时,可以用AS关键字起别名,方便操作。
GROUP BY 按组分类显示查询出的数据。
HAVING GROUP BY分组时依赖的分组条件。
ORDER BY将查询出来的结果集按照一定顺序排序完成。
LIMIT 限制显示查询结果的条数。

2.最简单的查询 

select 123;
select 'abc';
select 1+1;

3. 从表中获取数据

        语法:select 字段名,字段名 from  表名

3.1 全字段查询
-- 全字段查询
select sid,sname,birthday,ssex,classid from student;
select * from student;  -- sql优化  1.不要使用*代替字段名
3.2  部分字段查询
-- 部分字段查询
select sname,ssex from student;

4. 字段名起别名

        表名或者字段名过长时,可以用AS关键字起别名,方便操作。

        语法:SELECT 表别名.字段名1 AS 字段别名1, 表别名.字段名2 AS 字段别名2 FROM 表名 AS 表别名

select sname as '姓名' from student;
select sname as '姓名' , birthday '生日' ,ssex 性别 from student;

5.添加一个字段 

select sname ,'猿究院' 学校 from student;

6. distinct 去重

        语法:SELECT DISTINCT 字段名1, 字段名2... FROM 表名 

注意:所有的字段数据要一致才会去重 

select distinct sname,ssex from student;

7.WHERE条件子句 

        语法:SELECT * FROM 表名 [ WHERE 条件];

注意

• WHERE条件子句不是必须的;

• WHERE子句,可以给查询增加条件;

• 条件:为筛选条件,如不指定则修改该表的所有数据。 

 

- 带条件的查询

-- 【where 子句】
select * from student where sid=5;
select * from student where sid<>5;
select * from student where sid>5;
select * from student where sid between 3 and 6;

-- 查找1班的女同学
select * from student where classid=1 and ssex='女';

面试题!!!
        查询 年龄 大于1990-1-1 的同学

select * from student where birthday < '1990-1-1'; 
7.1 LIKE 关键字 

        语法:SELECT * FROM 表名 WHERE 字段 LIKE 条件;

注意

• 在WHERE子句中,使用LIKE关键字进行模糊查询;

• 与“%”一起使用,表示匹配0或任意多个字符;

• 与“_”一起使用,表示匹配单个字符。  

模糊符号:
% 任意多的任意字符
 _ 一个任意字符

-- 模糊符号
-- % 任意多的任意字符
--  _ 一个任意字符
insert into student(sname) values('杨靓');
insert into student(sname) values('杨文齐'),('小小杨'),('杨帅哥'),('帅气的杨同学');

select * from student where sname like '%杨%';
select * from student where sname like '%杨';
select * from student where sname like '杨%';

select * from student where sname like '杨_';
select * from student where sname like '杨__';
select * from student where sname like '杨___';
7.2 IN 关键字 

        语法:SELECT * FROM 表名 WHERE 字段 IN (值1,值2...);

注意

• 查询的字段的值,至少与IN 后的括号中的一个值相同;

• 多个值之间用英文逗号隔开。 

-- in 在某个特定的范围
-- 3 5 7 9
-- or 会让索引失效
select * from student where sid=3 or sid=5 or sid=7 or sid=9;

-- 推荐
-- in 可以使用到索引
7.3 NULL 值查询

        语法:SELECT * FROM 表名 WHERE 字段 IS NULL | IS NOT NULL

 注意

• NULL代表“无值”;

• 区别于零值0和空符串;

• 只能出现在定义允许为NULL的字段;

• 须使用 IS NULL 或 IS NOT NULL 比较操作符去比较。

-- null
-- is 是一个什么
select * from student where birthday is null;
select * from student where birthday is not null;

8.常用的聚合函数 (非常非常重要)

函数名 返回值
AVG(col) 返回指定列的平均值
COUNT(col) 返回指定列中非NULL值的个数
MIN(col)返回指定列的最小值
MAX(col)返回指定列的最大值
SUM(col) 返回指定列的所有值之和

聚合函数(非常重要*****)
把多个值变成一个值

  • count() 统计个数
  • max() 求最大值
  • min()  求最小值
  • sum()  求和
  • avg()  求平均
-- 聚合函数(非常重要*****)
-- 把多个值变成一个值
-- count() 统计个数
-- max() 求最大值
-- min()  求最小值
-- sum()  求和
-- avg()  求平均

-- count() 统计个数
-- count的特征: 任何类型都可以 但是不统计null
-- select count(字段\常量\*) from student;
select count(sid) from student;  -- 主键
select count(classid) from student; -- 不统计null

select count('a') from student;  -- 不推荐
select count(123) from student;  -- 推荐
select count(*) from student;    -- 推荐

-- sum avg min max 数值类型
select sum(score) from sc;
select avg(score) from sc;
select max(score) from sc;
select min(score) from sc;


-- 统计出成绩表中一共有多少次考试,总成绩,平均分,最高分,最低分
/*
SELECT  
    COUNT(DISTINCT sid) AS total_exams,   
    SUM(score) AS total_score,  
    AVG(score) AS average_score, 
    MAX(score) AS highest_score,  
    MIN(score) AS lowest_score 
from sc; 
*/
select count(*) ,sum(score),avg(score),max(score),min(score) from sc;

9.分组 group by  

分组 group by

  • 对所有的数据进行分组统计;
  • 分组的依据字段可以有多个,并 依次分组。
  • HAVING 与GROUP BY结合使用,进行分组 后的数据筛选。
-- 分组 group by ******
--男女同学各有多少人
select ssex,count(1) from student group by ssex;

-- 统计出各班有多少人
select classid,count(1) from student group by classid;

-- 统计成绩表中 每个同学的总分和平均分
select sid,sum(score),avg(score) from sc group by sid;


-- 查询出平均分不及格的学生 sid 平均分
-- having where的区别 (面试)
-- having 对分组聚合后的数据进行筛选
select sid,sum(score),avg(score) from sc  group by sid having avg(score) <60 ;
select sid,sum(score),avg(score) from sc where score<60  group by sid having avg(score) <60 ;

having where的区别 (面试) 

10.ORDER BY排序

        语法:SELECT * FROM 表名 ORDER BY 字段名 [DESC|ASC 

注意

• ORDER BY 表示对SELECT语句查询得到的结果,按字段名进行排序;

• DESC表示排序的顺序为降序,ASC表示排序的顺序为升序;

•“[ ]”包含的内容可以省略。 

-- order by 排序
-- 先写先排
-- 升序 asc 不写(默认)
-- 降序 desc  必须声明
select * from student order by classid desc;  -- 降序
select * from student order by classid asc;  -- 升序

select * from sc order by score desc, cid asc;
select * from sc order by score desc, cid desc;

11.LIMIT关键字 

        语法:SELECT * FROM 表名 LIMIT [n , m ]

注意

• LIMIT关键字是MySQL特有关键字;

• LIMIT限制SELECT返回结果的行数;

• n 表示第一条记录的偏移量,m 表示显示记录的数量;

•“[ ]”包含的内容可以省略 

 limit 分页
步长 从0 开始  (页码-1)*步长,步长
语法:select * from student limit 位置,步长;

-- limit 分页
-- 步长 从0 开始  (页码-1)*步长,步长
select * from student limit 位置,步长;
select * from student limit 0,3;
select * from student limit 3,3;
select * from student limit 6,3;
-- 应用层解决
-- select * from student limit (3-1)*3,3;  -- 错误的

-- 找到成绩及格的总分数排名第二的 sid  总成绩
SELECT sid,sum(score) from sc  where score >=60 group by sid order by sum(score) desc LIMIT 1,1;
  
   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

标签:语句,--,score,单表,student,sid,DQL,where,select
From: https://blog.csdn.net/m0_68041576/article/details/140575388

相关文章

  • idea内置数据库DataGrip + 多表操作sql语句 -- 逻辑外键建表 + 案例联系
    逻辑外键建表+案例联系--=====================================多表设计================================---------------------一对多职位与员工--员工子表createtabletb_emp(idintunsignedprimarykeyauto_incrementcomment'id',user......
  • Java基础语法01-运算符&流程控制语句If
    Java基础语法1.运算符1.1算术运算符(理解)1.1.1运算符和表达式运算符:对常量或者变量进行操作的符号表达式:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。​不同运算符连接的表达式体现的是不同类型的表达式。举例说明:inta=10;intb=2......
  • javascript条件判断语句。
    if语句条件满足就执行,不满足就不执行if(条件){语句}ifelse语句条件满足,执行语句1,条件不满足,执行语句2if(条件){语句1}else{语句2}ifelseifelseif… if(条件1){ 语句1 }else{ 语句2 }if(条件2){ 语句2 }el......
  • MySQL数据库 DQL操作
    一、数据库相关概念          1.数据库存储数据的仓库:数据是有组织的进行存储英文:DataBase,简称DB数据库就是将数据存储在硬盘上,可以达到持久化存储的效果2.数据库管理系统:管理数据库的大型软件......
  • MP+XML手写sql语句分页查询
    原则:让IPage接收从数据库查处的记录@AutowaireprivateUserMapperuserMapper;publicPageDTO<UserVO>pageUser(UserPageQueryquery){IPage<UserVO>page=newPage<>(query.getPageNo(),2);page=userMapper.PageAndXml(query,page);List<U......
  • C基础:控制语句
    1.分支语句1.1if语句1.1.1基本结构if(表达式){语句块1;}else{语句块2;}执行顺序:如果条件成立,则执行语句块1,否则条件不成立的话执行语句块2。1.1.2分层结构if(表达式1){语句块1;}elseif(表达式2){语句块2;}else{语句块3;}执行顺序:如果满......
  • idea内置数据库DataGrip + 多表查询sql语句 -- 内连接与外连接
    多表查询内连接与外连接--——————————多表查询--用的是多表设计中一对多的表与数据--单表select*fromtb_dept;select*fromtb_emp;--多表select*fromtb_emp,tb_deptwheretb_emp.dept_id=tb_dept.id;--==============内链接没有联系的查......
  • 循环执行语句:do while语句、for语句、while语句
    什么是循环执行语句循环执行语句在百度之中的意思是一组被重复执行的语句称之为循环体,能否继续重复,决定循环的终止条件。循环语句是由循环体及循环的终止条件两部分组成的。要使用循环语句时,必须要确定循环体及条件(布尔表达式)两个重要因素。简单来说,当你在打游戏的时......
  • ## 学习笔记day05-C语言基础:控制语句 if else、do while、for循环
    day05六、控制语句1.顺序语句​在模块内部没有分支、跳转、循环等条件时,程序按照顺序执行2.分支语句选择语句if...else单分支if(表达式){代码块;} step:先判断表达式是否为真(非0为真,0为假)如果为真,进入if选择结构,执......
  • SQL语句——DDL数据定义语言
    1.sql语言不区分大小写2._(下划线)进行名字的分割,不适用驼峰命名3.;  语句sql结尾处加一个;来表示结束4.一般关键词建议用大写5.所有名称不能用中文1.创建数据库CREATEDATABASE[IFNOTEXISTS]库名--库#创建库#createdatabasexiaozhao;#createdatabaseteac......