数据库的基础学习1:select语句的查询

这篇具有很好参考价值的文章主要介绍了数据库的基础学习1:select语句的查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据库的三个阶段:人工管理阶段、文件系统阶段、数据库系统阶段

数据库管理系统:DBMS

常见的关系型数据库:Oracle、DB2、mysql

常见的非关系型数据库:MongoDB、redies

sql的四部分:

DML(update、delete、insert)

DDL(create、drop、alter、truncate)

DQL(select查询语句)

DCL(对数据进行变更)


MySQL数据库的常见操作:

查看所有数据库:show databases;

查看以a开头的数据库:show databases like 'a%';

创建数据库:create database if not  exists 数据库名;

删除数据库:drop database if exists 数据库名;

注:在数据库的语法规定里是不区分大小写,但通常关键字大写,数据库名、表名、字段名小写


查询数据:

提示:使用select语句进行查询数据,语法格式如下

SELECT
{* | <字段列名>}
[
FROM <表 1>, <表 2>…
[WHERE <表达式>
[GROUP BY <group by definition>
[HAVING <expression> [{<operator> <expression>}…]]
[ORDER BY <order by definition>]
[LIMIT[<offset>,] <row count>]
]

下面我们来分条解析使用select 的语法格式:

  • {*|<字段列名>}包含星号通配符的字段列表,表示所要查询字段的名称。
  • <表 1><表 2>…,表 1 和表 2 表示查询数据的来源,可以是单个或多个。
  • WHERE <表达式>是可选项,如果选择该项,将限定查询数据必须满足该查询条件。
  • GROUP BY< 字段 >,该子句告诉 MySQL 如何显示查询出来的数据,并按照指定的字段分组。
  • [ORDER BY< 字段 >],该子句告诉 MySQL 按什么样的顺序显示查询出来的数据,可以进行的排序有升序(ASC)和降序(DESC),默认情况下是升序。
  • [LIMIT[<offset>,]<row count>],该子句告诉 MySQL 每次显示查询出来的数据条数

查询表中所有字段或指定字段,字段去重distinct

  所有字段:

  • 使用“*”通配符查询所有字段,语法格式:SELECT * FROM 表名;  给所有的字段内容去重在*前面加distinct即可。
  • 在select后面列出表的所有字段名,用 英文的逗号  , 分隔开。 在第一个字段名前面加distinct即可。

  指定字段:

  • 在select后跟指定字段名称即可;去重在字段名前加distinct。     

表名很长时,可以在标明后面 通过 AS 关键字 为表指定一个别名;字段也是 语法一样,可以给字段也指定别名。

表名 AS 别名;
字段名 AS 别名;

limit:可以限制文件的输出条数和输出位置

LIMIT 初始位置,输出条数    --下表是从0开始
LIMIT 输出条数  --默认从第一条开始
LIMIT 输出条数 OFFSET 初始位置

 order by:对查询结果通过某一字段排序(可以通过字段名排序)

ORDER BY <字段名> [ASC|DESC]    --ASC是默认的升序的 如果不写,默认ASC , desc是降序

where 条件查询语句 

  • 带比较运算符和逻辑运算符的查询条件
  • 带 BETWEEN AND OR关键字的查询条件
  • 带 IS NULL 关键字的查询条件
  • 带 IN 关键字的查询条件
  • 带 LIKE 关键字的查询条件
--查询日本2018年的电影
SELECT * FROM 表名
WHERE 字段名='日本'AND 字段名='2018';
--查询在 xian上映或者在中国大陆上映且类型为喜剧/奇幻/古装的影片信息
SELECT * FROM cinema_later
WHERE city='xian'OR (region='中国大陆'AND tag='喜剧/奇幻/古装');
--模糊查询
--查询以人结尾,前面有任意字符的title
SELECT *FROM cinema_later
WHERE title LIKE '%人';

--查询包含有人字的title
SELECT * FROM cinema_later
WHERE title LIKE '%人%';

--查询人字前面有固定字符(两个下划线表示),但以任意字符结尾的
SELECT * FROM cinema_later
WHERE title LIKE '__人%';

--默认不区分   加binary按照区分大小写字母查询,
SELECT * FROM cinema_later
WHERE city LIKE BINARY 'C%';
--范围区间查询between
-- 5000到8000之间,且上映城市为xian的
SELECT * FROM cinema_later
WHERE (wish_count BETWEEN 5000 and 8000)AND city='xian';
--查询英文片名为null的影片
SELECT * FROM north_american_box_office
WHERE yingwenpianming IS NULL
--查询英文片名不为null的影片
SELECT * FROM north_american_box_office
WHERE yingwenpianming IS not NULL
--查询当日票房为100或200或300的
SELECT *FROM north_american_box_office
WHERE dangripiaofang IN(100,200,300);

 group by 分组

group by单独使用时,后面跟字段名即可。GROUP BY 关键字也可以和 GROUP_CONCAT() 函数一起使用。这样可以把分组的某一字段的每个字段值都显示。

SELECT 分组的字段名, GROUP_CONCAT(传入需要全部显示的字段名) 
FROM 表名
GROUP BY 分组的字段名;

在数据统计时,GROUP BY 关键字经常和聚合函数一起使用。聚合函数包括: COUNT()SUM()AVG()MAX() MIN()

  1. COUNT() 用来统计记录的条数;
  2. SUM() 用来计算字段值的总和;
  3. AVG() 用来计算字段值的平均值;
  4. MAX() 用来查询字段的最大值;
  5. MIN() 用来查询字段的最小值。
SELECT sex,COUNT(sex) FROM tb_students_info  GROUP BY sex;  --统计指定的字段的数量

WITH POLLUP 关键字用来在打印所有分组记录的最后加上一条记录,这条记录是上面所有记录的总和,即统计记录数量。 GROUP BY sex WITH ROLLUP;

having 可以用来过滤分组的一些信息,类似where,支持where里所有的操作。但也有差异

  • where用于过滤数据行,having用于过滤分组
  • where查询不可以使用聚合函数,having可以使用聚合函数。
  • where语句是在分组前进行过滤,而having是在分组后进行过滤。
  • where是根据数据库文件过滤,而having是根据查询结果进行过滤。(having查询的结果必须select有查询)
  • where查询中不可以使用字段别名,但having可以使用字段别名。

表连接:

表连接分为三种:交叉连接、内连接、外连接

交叉连接相当于两个表的笛卡尔积,和内连接不加过滤条件是一样的效果。交叉用的较少,因为效率不高。使用的关键字是cross join 也可以省略。使用语法如下

SELECT <字段名> FROM <表1> CROSS JOIN <表2> [WHERE子句]
或者
SELECT <字段名> FROM <表1>, <表2> [WHERE子句] 

 内连接:通过关键字inner join 来连接两张表。再通过on来设置内连条件(通过条件来连接对应的数据行,有对应匹配关系),如果不加on设置条件,则也相当于计算两个表的笛卡尔积。且多个表连接时,在from后面继续使用inner join on即可实现多表连接。

SELECT *
FROM resource AS b
INNER JOIN resource_type AS a
ON a.type_id=b.resource_type
--多表查询
SELECT *
FROM material_record_info AS a
INNER JOIN material_info AS b1
ON a.m_id=b1.material_id
INNER JOIN user_info AS b2
ON a.u_id=b2.user_id

外连接: 外连接会先将表分为基表和参考表,再以基表为依据返回满足和不满足条件的记录,外连接分为左连接和右连接。

左外连接和右外连接的区别是:左外连接即基表在关键字left outer join的左边,右外连接基表在关键字left outer join的右边。

那么基表有什么意义和作用呢?就是在进行条件匹配时,基表没有匹配到对应数据的数据行也会被返回,在没有匹配到对应数据的行里用null来填充。简单来说就是基表的所有数据行均会被返回。

外连接的使用语法和内连接很类似,只是在关键字前加了限定词left或者right

SELECT *
FROM resource_type AS a
LEFT OUTER JOIN resource AS b
ON a.type_id=b.resource_type

子查询:   

子查询也可以实现类似于表连接的多表查询,但也有区别,子查询是将一个查询语句嵌套在另一条查询语句里。其中,连接子查询的操作符可以是 in、not in、exists、not exists等关键字。子查询可以在select、update、delete里使用。

--查大于80分的教师信息  子查询
SELECT *
FROM teacher AS t
INNER JOIN course AS c
ON t.t_id=c.t_id
WHERE c.c_id IN(
	SELECT c_id
	from score student_db
	GROUP BY c_id
	HAVING AVG(score>80)
	)
-- exists:如果符合条件,外集合返回表所有内容;加上and判断条件,就只返回符合两个条件的信息
SELECT *
FROM user_info AS a
WHERE EXISTS(
	SELECT *
	FROM material_record_info as b
	WHERE b.u_id=7
	)AND user_id=7;

子查询和表连接的区别

  一般来说,表连接都可以用子查询来替代,反之不然,有点子查询不能用表连接替换。子查询比较灵活,直观,会使sql语句更容易阅读和编写,适合用于筛选数据。而表连接更适合查看数据表的连接。

select查询语句的执行顺序:

除了select查询语句的语法顺序我们需要掌握,select语句在内存的执行顺序我们也需要掌握。大题一共可以分为10步:

  1. From:计算两个表的笛卡尔积,都到一个虚拟表V1,这是所有select语句最先执行的操作,其操作都需要在V1的基础上。
  2. On:从V1中筛选出符合条件的数据,形成虚拟表V2。
  3. Join:将该join的数据补充到V2,形成V3。
  4. Where:执行筛选(不能使用聚合函数),得到V4。
  5. Group By:对数据进行分组,得到V5.
  6. Having:对分组后的数据进行筛选(可以用聚合函数),筛选结果为V6。
  7. Select:得到返回列的数据V7。
  8. Distinct:去重,过滤掉重复数据,得到V8。
  9. Order By:排序,得到V9。
  10. limit:返回需要的行数。

注意:文章来源地址https://www.toymoban.com/news/detail-480544.html

  • GROUP BY 条件中,每个列必须是有效列,不能是聚合函数
  • NULL 值也会作为一个分组返回
  • 除了聚合函数,SELECT 子句中的列必须在 GROUP BY 条件中

到了这里,关于数据库的基础学习1:select语句的查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据库SELECT语句

    SELECT语句 检索单个列 SELECT prod_name FROM products; 检索多个列 SELECT prod_id, prod_name, prod_price FROM products; 检索所有列 SELECT * FROM products; 检索不同的行 DISTINCT SELECT DISTINCT vend_id FROM products; 限制结果 LIMIT 带一个值的LIMIT总是从第一行开始,给出的数为返回的行数。 带两个值的LIMIT可以

    2024年01月15日
    浏览(64)
  • MySQL数据库增删改查及聚合查询SQL语句学习汇总

    目录 数据库增删改查SQL语句 MySQL数据库指令 1.查询数据库 2.创建数据库 3.删除数据库 4.选择数据库 创建表table   查看所有表 创建表 查看指定表的结构 删除表 数据库命令进行注释 增删改查(CRUD)详细说明 增加 SQL库提供了关于时间的函数:now()  查询 查询表作列与列之间进

    2024年02月09日
    浏览(86)
  • 基本的SELECT语句——“MySQL数据库”

    各位CSDN的uu们好呀,好久没有更新小雅兰的MySQL数据库专栏啦,接下来一段时间,小雅兰都会更新MySQL数据库的知识,下面,让我们进入今天的主题吧——基本的SELECT语句!!! SQL概述 SQL语言的规则与规范 基本的SELECT语句 显示表结构 过滤数据 1946 年,世界上第一台电脑诞生

    2024年02月09日
    浏览(58)
  • Mysql数据库:select from语句详解

    💖The Begin💖点点关注,收藏不迷路💖 select from语句用于从数据库中查询数据。它由两个组成:select 和from。 select 用于指定要查询的列,from用于指定要查询的表。 通过结合使用这两个,我们可以从数据库中选择特定的列和行进行查询。 下面是se

    2024年02月03日
    浏览(48)
  • Mysql数据库(六):基本的SELECT语句

    本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远! 语法: 选择全部列: 一般情况下,除非需要使用表中所有的字段数据,最好不要使用通配符‘ *

    2024年02月08日
    浏览(62)
  • openGauss学习笔记-195 openGauss 数据库运维-常见故障定位案例-分析查询语句运行状态

    195.1 分析查询语句运行状态 195.1.1 问题现象 系统中部分查询语句运行时间过长,需要分析查询语句的运行状态。 195.1.2 处理办法 以操作系统用户omm登录主机。 使用如下命令连接数据库。 postgres为需要连接的数据库名称,8000为端口号。 设置参数track_activities为on。 当此参数为

    2024年01月15日
    浏览(59)
  • 【MySQL入门】-- 数据库简单的SELECT语句详解

    目录 1.SQL分类 2.注释 3.数据导入指令 4.基本的SELECT语句 5.列的别名 6.去重复行 7.显示表结构 8.一些数据库基本操作 1.SQL分类 SQL语言在功能上主要分为三大类: DDL(Data Defintion Language)数据定义语言:定义不同的数据库,表,视图,索引等,可以创建,删除,修改数据库和数据库

    2024年02月09日
    浏览(69)
  • 数据库作业——select查询操作

    创建数据库 插入数据 1、显示所有职工的基本信息。 2、查询所有职工所属部门的部门号,不显示重复的部门号。 3、求出所有职工的人数。 4、列出最高工和最低工资。 5、列出职工的平均工资和总工资。 6、创建一个只有职工号、姓名和参加工作的新表,名为工作日期表。

    2024年02月13日
    浏览(52)
  • SQL数据库的查询操作大全(select)

    1、数据库的连接、创建 2、对字段的操作:(alter table) 3、对数据的操作(插入、修改、删除) 4、数据查询(select) 5、多表查询(join on) 6、约束操作 四、数据库查询大全(select) 1、select 字段名 from 表; 2、In查询:用于 过滤 你所需要查询的内容                

    2023年04月08日
    浏览(73)
  • MySQL数据库查询语句之组函数,子查询语句

    以组为操作单位,一组数据得到一个结果。 在没有手动分组的前提下,整张表默认为一组数据 max(列名):获取最大值 min(列名):获取最小值 sum(列名):获取总和 avg(列名):获取平均值 count(列名):统计值的个数 所有组函数都会自动忽略null值 在某些情况下,我们需要根据需要

    2024年01月23日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包