基本的DQL语句-单表查询

一、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; -- 不统计nullselect 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;

拓展知识:

        在不同的DBMS 中使用的关键字可能不同。在MySQL、PostgresQL、MariaDB和SQLite中使用LIMIT关键字,而且需要放到 SELECT语句的最后面。
        如果是SQL Server和 Access,需要使用TOP关键字,比如:
SELECT TOP 5 name,hp_max FROM heros ORDER BY hp_max DESC
        如果是 DB2,使用FETCH FIRST 5 ROwS ONLY这样的关键字;
SELECT name,hp_max FROM heros ORDER BY hp_max DESC FETCH FIRST 5 ROWS ONLY
        如果是 Oracle,你需要基于 ROWNUM来统计行数:
SELECT rownum,last_name , salary FROM employees WHERE rownum <5 ORDER BY salary DESC;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/49269.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ORB_SLAM2 ORBSLAM2 Ubuntu20.04 ROS Noetic虚拟机镜像下载

下图是build.sh 和 build_ros.sh 编译完成截图&#xff1a; slam测试视频: orbslam2 ubuntu20.04 test 下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/16R7Pb6LjgR5SeoeBSZfgaQ?pwdu05r 提取码&#xff1a;u05r

【电源专题】结合锂电池相关资料和华为手机聊聊锂离子电池使用条件限制

在文章:【电源专题】锂电池的特点和工作原理 中我们讲到了一些关于锂电池种类和特点、工作原理等。但是对于锂离子电池使用条件限制却没有介绍,本文基于手机产商 锂离子电池使用条件-电池性能和应用介绍 | 华为官网 (huawei.com)提供的介绍文档再次深入学习锂离子电池的一些特…

FastAPI(六十七)实战开发《在线课程学习系统》接口开发--用户登陆接口开发

源码见&#xff1a;"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 接上一篇文章FastAPI&#xff08;六十六&#xff09;实战开发《在线课程学习系统》接口开发--用户注册接口开发。这次我们分享实际开发--用户登陆接口…

面试知识储备-redis和redission

1.redis的使用 引入依赖&#xff0c;自动注解redistemplate即可使用&#xff0c; 默认的redistemplate存入到redis中是字符流的形式&#xff0c;需要配置redistemplate&#xff0c; 如果不想配置&#xff0c;可以使用stringRedistemplate 可以使用string类型&#xff0c;但是…

JCR一区级 | Matlab实现GA-Transformer-LSTM多变量回归预测

JCR一区级 | Matlab实现GA-Transformer-LSTM多变量回归预测 目录 JCR一区级 | Matlab实现GA-Transformer-LSTM多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.【JCR一区级】Matlab实现GA-Transformer-LSTM多变量回归预测&#xff0c;遗传优化算法&#…

Linux中用shell脚本实现用户注册,登录,删除特点

一、说明 Linux中用shell脚本实现用户注册&#xff0c;登录&#xff0c;删除特点&#xff1a;用户和密码是单另储存在一个文件中&#xff0c;程序结束后&#xff0c;下次登录只要存储用denglu.sh 主目录 denglu1.sh 注册功能模块 denglu2.sh 登录功能模块 denglu3.sh…

C++ 双指针与链表

链表中的一些题目可以用双指针解决&#xff0c;我们将这些题目与其他双指针题目做了总结。 非链表题目 替换数字 给定一个字符串 s&#xff0c;它包含小写字母和数字字符&#xff0c;请编写一个函数&#xff0c;将字符串中的字母字符保持不变&#xff0c;而将每个数字字符替…

书生大模型实战营闯关记录----第二关:实现word_count统计文本中word频次

实现word_count统计文本中word频次 请实现一个wordcount函数&#xff0c;统计英文字符串中每个单词出现的次数。返回一个字典&#xff0c;key为单词&#xff0c;value为对应单词出现的次数。 Eg: Input: """Hello world! This is an example. Word coun…

每日刷题记录(codetop版)

7.21 7.22 7.23 复习7.21和7.22

读书的意义

文章目录 引言什么是热恋的人常做的事?写作是什么样的过程?什么是人生的转折点?人生的答案是什么?为什么很多人宁愿痛苦也不改变?回望过去常有的感受是什么?女人可以活成哪种样子?为什么不能轻言放弃?有没有做一件事“最完美的时刻”?如何生活得有滋有味?为什么要尝试…

Eureka在Kubernetes中的部署指南:微服务发现的艺术

标题&#xff1a;Eureka在Kubernetes中的部署指南&#xff1a;微服务发现的艺术 在当今快速发展的云计算时代&#xff0c;微服务架构因其灵活性和可扩展性而受到青睐。Eureka&#xff0c;作为Netflix开源的服务发现框架&#xff0c;已成为微服务架构中的一个关键组件。然而&am…

并发情况导致事务失效的场景

public void test(Pageable request){for (int i 0; i < 100; i) {//新建线程处理new Thread(() -> {userInfoService.testDemo();}).start();} } 这里创建多个线程模拟多并发场景 Transactional(rollbackOn Exception.class) public synchronized void testDemo() {…

一文入门SpringSecurity 5

目录 提示 Apache Shiro和Spring Security 认证和授权 RBAC Demo 环境 Controller 引入Spring Security 初探Security原理 认证授权图示​编辑 图中涉及的类和接口 流程总结 提示 Spring Security源码的接口名和方法名都很长&#xff0c;看源码的时候要见名知意&am…

海外IP代理科普:代理池有什么用?代理池大小的影响

在当今数字化时代&#xff0c;网络爬虫已经成为获取各类信息必不可少的工具。在大规模数据抓取中&#xff0c;使用单一 IP 地址或同一 IP 代理往往会面临抓取可靠性降低、地理位置受限、请求次数受限等一系列问题。为了克服这些问题&#xff0c;构建代理池成为一种有效的解决方…

控制欲过强的Linux小进程

控制欲强?视奸&#xff1f;普通人那才叫视奸&#xff0c;您是皇帝&#xff0c;天下大事无一逃过您的耳目&#xff0c;您想看什么就看什么&#xff0c;臣怀疑他在朋友圈私养兵士&#xff0c;囤积枪甲&#xff0c;蓄意谋反&#xff0c;图谋皇位啊&#xff01; 哈哈哈哈开个玩笑&…

使用GoAccess进行Web日志可视化

运行网站的挑战之一是了解您的 Web 服务器正在做什么。虽然各种监控应用程序可以在您的服务器以高负载或页面响应缓慢运行时提醒您&#xff0c;但要完全了解正在发生的事情&#xff0c;唯一的方法是查看 Web 日志。阅读日志数据页面并了解正在发生的事情可能需要花费大量时间。…

离散型以及连续型随机变量

目录 离散型随机变量 定义与性质 分布律 分布函数 连续型随机变量 定义与性质 概率密度函数 分布函数 多维随机变量 二维离散型随机变量 二维连续型随机变量 常见的连续型分布 离散型随机变量的概率质量函数和概率密度函数之间的关系是什么&#xff1f; 如何计算连…

C++的UI框架和开源项目介绍

文章目录 1.QT2.wxWidgets3.Dear ImGui 1.QT QT的开源项目&#xff1a;QGIS&#xff08;地理信息系统&#xff09; https://github.com/qgis/QGIS?tabreadme-ov-file 2.wxWidgets wxWidgets的开源项目&#xff1a;filezilla https://svn.filezilla-project.org/svn/ wxWidg…

OSI参考模型:解析网络通信的七层框架

引言 在现代计算机网络中&#xff0c;OSI&#xff08;开放式系统互联&#xff09;参考模型是理解和设计网络通信协议的基础。1978年由国际标准化组织&#xff08;ISO&#xff09;提出&#xff0c;OSI模型定义了网络通信的七层结构&#xff0c;每一层都承担着特定的功能&#x…

环形链表的相关证明

141. 环形链表 - 力扣&#xff08;LeetCode&#xff09; 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使…