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

基本的DQL语句-单表查询

时间:2024-07-26 13:54:25浏览次数:18  
标签:语句 -- 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按组分类显示查询出的数据。
HAVINGGROUP 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的优化
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.添加一个字段
//给sname 后面 新增了一个名叫 ‘学校’ 的字段 ,sname对应的值都为‘小猿’
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;
-- 上下效果相同,都是查找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 ssex='女' AND classid = 1;

(面试题)查询年龄大于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 '杨___'

7.2 IN关键字

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

注意:

  • 查询的字段的值,至少与IN 后的括号中的一个值相同;
  •  多个值之间用英文逗号隔开。 
SELECT * FROM student WHERE sid = 3 OR sid =5 OR sid = 7 sid = 9

// 使用 in 进行优化
SELECT * FROM student WHERE sid IN (3,5,7,9)
7.3 NULL值查询

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

 注意

  • NULL代表“无值”;
  • 区别于零值0和空符串;
  • 只能出现在定义允许为NULL的字段;
  • 须使用 IS NULL 或 IS NOT NULL 比较操作符去比较。
-- null 
-- is 是一个什么
SELECT * FROM dtudent WHERE birthday IS NULL;
SELECT * FROM dtudent WHERE birthday IS  NOT NULL;
8.常用的聚合函数
函数名返回值
AVG(col)返回指定列的平均值
COUNT(col) 返回指定列中非NULL值的个数
MIN(col)返回指定列的最小值
MAX(col)返回指定列的最大值
SUM(col) 返回指定列的所有值之和

-- 聚合函数(非常重要*****)
-- 把多个值变成一个值
-- 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(12334567890) 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,  //AS改别名
    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 SUM(score),AVG(score) FROM sc GROUP BY sid;

-- 查询出平均分不及格的学生 sid 平均分
-- having where的区别 (面试)
-- having 对分组聚合后的数据进行筛选

SELECT 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 位置,步长;

-- select * from student limit 位置,步长;
-- 步长 从0开始  (页码-1)*步长,步长
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);

标签:语句,--,score,单表,student,sid,DQL,WHERE,SELECT
From: https://blog.csdn.net/m0_64481525/article/details/140616985

相关文章

  • 跳转语句
     一、break语句在for循环中使用break:publicclassBreakExample{ publicstaticvoidmain(String[]args){   for(inti=0;i<10;i++){     if(i==5){       break;     }     System......
  • 如何在 Python 中对多行使用单个 INSERT INTO 语句?
    我目前正在开发一个DiscordPython机器人,我在其中循环遍历ForumTags列表,并为每个对象生成INSERTINTOSQL语句以将数据插入MySQL数据库。但是,我想要通过将所有这些单独的INSERTINTO语句组合到单个查询中来优化我的代码,如下所示:INSERTINTO......
  • 日撸Java三百行(day03:基本if语句)
    文章目录:一、if、then、else1.if语句的第一种格式2.if语句的第二种格式3.if语句的第三种格式二、方法(函数)的调用1.方法定义1.1最简单的方法定义1.2带参数的方法定义1.2.1单个参数的方法定义格式1.2.2多个参数的方法定义格式1.3带返回值的方法定义2.方法的调用2.1......
  • C语言分支语句之if的一些用法
    目录引言C语言结构1.if语句1.1if1.2else2.分支中包含多条语句3.多重选择elseif4.嵌套if5.悬空else/else与if配对问题引言C语言作为一种非常常用的编程语言,具有灵活强大的循环和分支结构。循环结构允许我们重复执行一段代码,而分支结构则允许我们根据条......
  • sql-DQL基础语句总结
    一·基础查询1.语法SELECT*|{[DISTINCT]column|expression[alias],...}FROMtable;select查询列表from表名;注意:(1)SELECT:标识选择哪些列(2)FROM:标识从哪个表中选择2、特点(1)查询列表可以是:表中的字段、常量值、表达式、函数。(2)查询的结果是一个虚拟的表格。二·......
  • 【C++】选择结构- 嵌套if语句
    嵌套if语句的语法格式:if(条件1) {        if(条件1满足后判断是否满足此条件){条件2满足后执行的操作}        else{条件2不满足执行的操作}}下面是一个实例#include<iostream>usingnamespacestd;intmain4(){ /* 提示用户输入一个高考分数......
  • 流程控制语句结构
    分支结构:多个分支选择其中一个分支执行分支结构:根据条件选择性的执行某些代码1、条件判断:if...else系列2、选择结构:switch...case系列顺序结构:从上到下,从左到右依次执行跳转语句1.break语句break语句可以用在switch语句中,用于退出switch语句,是程序从switch结构后面的第......
  • JavaSE核心技术——3 流程控制语句结构
    一、顺序结构程序由上向下运行。二、分支结构1.if语句三种格式:2.switch-case注意:1.switch(表达式)中表达式的值必须是下述几种类型之一:byte,short,char,int,枚举(jdk5.0),String(jdk7.0);2.break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有break,程序会顺......
  • 数据库(MySQL)-DQL数据查询语言
        DQL(DataQueryLanguage数据查询语言)的用途是查询数据库数据,如select语句。其中,可以根据表的结构和关系分为单表查询和多表联查。单表查询    单表查询:针对数据库中的一张数据表进行查询全字段查询    语法:select字段名from表名#推荐s......
  • ### 流程控制语句结构
    流程控制语句结构顺序结构顺序结构是程序中最基本的结构,代码按照从上到下的顺序逐条执行。分支结构if-elseif语句用于基于条件表达式的真假来执行不同的代码块。f-else语句在条件表达式为假时提供了另一种执行路径。if-elseif-else语句可以处理多个条件分支。swit......