MySQL/MariaDB DML操作之Select

前言

上文我们已经讲解了MySQL/MariaDB的基础知识和DDL相关操作,接下来我们来说一下MySQL/MariaDB的DML操作,因select查询较复杂也较重要,所以本文主要是对select查询的详解。

DML操作

DML之select

投影查询

select col_name,[col_name1,...] from table_name;

select * from table_name ;#显示全表
遍历整张数据表,但对系统资源消耗较大,再进行大数据量的查询时,禁止使用这类操作

条件查询

select col_name,[col_name1,...] from table_name where where_definition
#条件比较操作符
=    #等值比较
<=>  #等值比较,包括与NULL的安全比较
<>或!=  #不等值比较
<,<=,>,>=  #其它比较符
IN  #指定范围内值的存在性测试
BETWEEN … AND …  #在某取值范围内
IS NULL  #是否为空值
IS NOT NULL  #是否为非空
LIKE  #可使用通配符:%, _
RLIKE或REGEXP  #可使用正则表达式的模式
#逻辑操作符
AND 
OR
NOT

 聚合查询

AVG():平均值 
SUM():总和
MAX():最大值
MIN():最小值
COUNT():记录总数

子句修饰符

GROUP BY #对符合条件的结果进行分组
HAVING: 对聚合查询的结果做过滤
ORDER BY col1[,col2] {ASC|DESC} #排序
LIMIT [Offset,]count #限制输出行数

select执行流程

FROM --> WHERE --> GROUP BY --> HAVING --> ORDER BY --> SELECT --> LIMIT

连接查询

事先将两张或多张表执行相应的join操作,而后根据join结果做查询

CROSS JOIN:笛卡尔积,交叉连接
select * from tab1,tab2; 
INNER JOIN:内连接
#等值连接
select * from tab1 inner join tab2 on tab1.col_name = tab2.col_name
OUTER JOIN:外连接
LEFT OUTER JOIN:左外连接
select s.name as student,t.name as teacher from students as s lift join teachers as t 
on s.TeacherID = t.TID;  
RIGHT OUTER JOIN:右外连接    
select s.name as student,t.name as teacher from students as s right join teachers as t
on s.TeacherID = t.TID;    
NATURAL JOIN:自然连接,等值连接
select tab1.col_name,tab2.col_name from tab1,tab2 where tab1.col_name = tab2.col_name;

子查询

基于某查询语句的结果再次进行的查询

用于where子句的子查询

①用于比较表达式中的子查询
要求子查询只能返回单个结果
select Name,Age from students where Age > (select AVG(Age) from students);
②用于in中的子查询
判断是否存在于指定的列表中
select Name from students where StuID in (select TID from teschers);
③用于exists中子查询

用于from中的子查询

select alias.col,... from (select statement) as alias where clause

select s.Name from (select * from students where Age > 20) as s where s.Name like ‘s%‘;

注:MySQL/MariaDB在子查询优化方面并不成熟,所以尽量避免使用子查询

联合查询

将两外或多个返回值字段相同的查询的结果合并输出

select statement union select statement

select Name,Age from teachers where Age>=40 union select Name,Age from students where Age>=40;

select实战

表结构

以ClassID分组,显示每班的同学的人数

以Gender分组,显示其年龄之和

以ClassID分组,显示其平均年龄大于25的班级

以Gender分组,显示各组中年龄大于25的学员的年龄之和

显示前5位同学的姓名、课程及成绩

显示其成绩高于80的同学的名称及课程

求前8位同学每位同学自己两门课的平均成绩,并按降序排列

显示每门课程课程名称及学习了这门课的同学的个数

显示其年龄大于平均年龄的同学的名字

统计各班级中年龄大于全校同学平均年龄的人数

The end

好了,select查询就先说到这里了,看起来select就这么点东西,其实要真正用好并不容易,所以小伙伴们多加练习吧,后续文章还会继续讲解MySQL/MariaDB系列的知识,有兴趣的可继续关注哦。以上仅为个人学习整理,如有错漏,大神勿喷~~~

时间: 2024-12-20 10:17:06

MySQL/MariaDB DML操作之Select的相关文章

[Sqoop]利用sqoop对mysql执行DML操作

业务背景 利用sqoop对mysql进行查询.添加.删除等操作. 业务实现 select操作: sqoop eval --connect jdbc:mysql://127.0.0.1:3306/market --username admin --password 123456 --query "select end_user_id, category_id, score, last_bought_date, days_left, update_time from market.PERIOD_RE

数据库MySQL/mariadb知识点——操作篇(4)数据操作语句

INSERT插入数据 单挑记录插入 INSERT INTO tb_name (col1,col2,...) VALUES (val1,val2,...); 示例: insert into tablename(字段1名称,字段2名称,......)values(字段1值,字段2值,...) MariaDB [testdb]> INSERT students(id,name,ages,gender) VALUES (1,'tom',26,'M'); MariaDB [testdb]> INSERT

Mysql(Mariadb) 基础操作语句 (持续更新)

基础SQL语句,记录以备查阅.(在HeiDiSql中执行) # 创建数据库 Create Database If Not Exists VerifyIdear Character Set UTF8; # 创建表 Create Table If Not Exists VerifyIdear.MyTable( ID Bigint(8) unsigned Primary key Auto_Increment, Updatetime DateTime, name VarChar(128) )Engine

MySQL/MariaDB基础性知识及DDL操作详解

前言 MySQL/MariaDB是一个开放源码的小型关联式数据库管理系统,由于其体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL/MariaDB作为网站数据库. 基础架构 MySQL核心组件 连接池:认证.线程重用.连接数限制.内存检查.缓存 SQL接口:DDL, DML, 关系型数据库的基本抽象 parser: 查询转换.对象权限检查 优化器:访问路径,性能相关的统计数据 caches和buffers:与存储引擎自身相关的I/O性

MySQL DML操作--------CURD最佳实战

1. 背景 * CURD 操作通常是使用关系型数据库系统中的结构化查询语言(Structured Query Language,SQL)完成的 * CURD 定义了用于处理数据的基本原子操作 * CURD 代表创建(Create).更新(Update).读取(Retrieve)和删除(Delete)操作. 2. 创建表操作 * 创建数据库(DB)  mytest CHARACTER SET: 设置字符集 mysql> CREATE DATABASE mytest CHARACTER SET ut

MySQL学习笔记——DML操作

有关数据库的DML操作 -insert into -delete.truncate -update -select -条件查询 -查询排序 -聚合函数 -分组查询 多表连接和子查询

php中对MYSQL操作之预处理技术(1)数据库dml操作语句

<?php //预处理技术 //创建一个mysqli对象 $mysqli = new MySQLi("主机名","mysql用户名","密码","数据库名"); //判断是否链接成功 if($mysqli->connect_error){ die($mysqli->connect_error); } //创建预编译对象 $sql = "insert into 表名 (name,qq,age) val

linux架构学习第二十八天之Mysql/MariaDB数据库入门

内容: 1.数据库简介以及mysql/mariadb背景介绍 2.数据库的一些名词 3.mysql的服务结构 4.mysql客户端的使用 5.数据类型 6.SQL语句介绍 7.mysql的事务机制 一.数据库简介以及mysql/mariadb背景介绍 数据可以存放在多种位置,如普通文件.专门的数据库中,而两者有什么区别,而为什么选择数据库存储?我们知道,假如数据存在普通文件中,当我们要查找其中的一个数据时,要把整个文件加载到内存中,再进行检索,这样速度慢不说,一旦文件较大,直接把内存撑爆了,而数

淘宝内部分享:MySQL &amp; MariaDB性能优化

淘宝内部分享:MySQL & MariaDB性能优化 发表于2015-01-20 16:26| 17496次阅读| 来源mysql.taobao.org| 21 条评论| 作者淘宝数据库团队 MySQL性能优化淘宝数据库 摘要:MySQL是目前使用最多的开源数据库,但是MySQL数据库的默认设置性能非常的差,必须进行不断的优化,而优化是一个复杂的任务,本文描述淘宝数据库团队针对MySQL相关的数据库优化方案. 编者按:MySQL是目前使用最多的开源数据库,但是MySQL数据库的默认设置性能非常的