MySQL 查询语句select讲解与练习

select语句执行流程:

START————>FROM------>WHERE(选择,合适的行)--------->GROUP BY(分组)---------->HAVING(对分组进行过滤)————>ORDER BY(排序)————>SELECT(投影,合适的字段)————>LIMIT————>end result

select单表查询:



DISTINCT:数据去重 例:select DISTINCT gender from students;

VARIABLES: mysql服务器自身内置变量 例:select variables like ‘query%‘;

AS:显示时使用别名  例:select name as  stuname  from  students;

IN: 或 例:select name,age from students where age in  (18,19,25);

is null: 取值为空 is not null: 取值不为空

like:   %任意长度任意字符  _任意单个字符

RLIKE:使用正则表达式

GROUP:根据指定的条件把查询结果进行分组以用于做聚合运算

内置函数:avg() , max() , min() , count() , sum()

order  by:根据指定字段对查询结果进行排序

升序:ASC(默认)   降序:DESC

LIMIT [[offset,]row_count] :对查询的结果进行输出行数数量的限制

对查询结果中的数据请求施加‘锁’:

FOR  UPDATE :写锁,独占锁,排他锁

LOCK IN SHARE MODE :读锁,共享锁

例:查看男女同学的平均年龄

select avg(age),gender  from  students  group  by  gender ;

例:查看男女同学的平均年龄大于20的组

select avg(age),gender  as  年龄  from  students  group  by  gender having 年龄>20;

例:查看姓名,年龄以年龄倒序排序

select name,age from students order  by age desc;

例:

select name,age from students order  by age limit 10,10 ;查看前10个之后的10个

练习题:

1. 在students表中,年龄大于25,且为男性的同学的姓名和年龄

select name,age  from students  where gender=‘m‘ and age>25;

2. 以classID为分组依据,显示每组的平均年龄

select  avg(age),classID from students where classID is not null group by classID;

3. 显示第二题中平均年龄大于30的分组及平均年龄

select  avg(age),classID from students  group by classID  having avg(age)>30;

4. 显示名字以L开头的同学的相关信息

select * from students  where name like  ‘L%‘;

5. 显示teacherID非空的同学的相关信息

select * from students  where teacherID is not null;

6. 以年龄排序后显示年龄最大的前10位同学的信息

select * from students  order by  age DESC limit 10;

7. 查询年龄大于等于20岁,小于等于25岁的同学的信息,用三种方法

select * from students where age>=20 and age<=25;
select * from students  where age between 20 and  25;
select * from students  where age in (20,21,22,23,24,25);

select多表查询:



交叉连接:又称笛卡尔乘积,结果两表行数相乘(不常用)。 例:select *  from  table1,table2;

内连接:

等值连接:让两张或多张表按“等值”建立连接关系(常用)

例:

select * from students,teachers  where  students.teacherID=teachers.TID ;
select s.name,c.class from students as s,classes as c  where s.classID=c.classID;

不等值连接:

自然连接:

自连接:一张表中一个字段的值等于另一个字段的值。

例:

select  s.name,t.name  from students  as  s,students  as t where  s.TeacherID=t.stuID;

外连接:

左外连接:以左侧表为准,以某一字段等值建立连接关系,如左表有的右表也有就一一对应,如左表有右表没有左表显示所有,右表留空对应。(显示左表所有,右表有的就对应没有就留空)

使用方法:FROM tb1  LEFT  JOIN  tab2  ON  tab1.col1=tab2.col;

例:

select s.name,c.class  from students  as s  LEFT  JOIN  classes  as  c  ON  s.classID=c.classID;

右外连接:

使用方法:FROM tb1  RIGHT  JOIN  tab2  ON  tab1.col1=tab2.col

子查询:在查询语句中嵌套着查询语句(mysql支持不好,少用)

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

用在where子句中的子查询:

(1) 用在比较表达式中的子查询,子查询仅能返回单个值:

例:

select name,age  from  students  where  age>(select avg(age) from students);

(2)用在IN中的子查询:子查询应该单键查询并返回一个或多个值构成列表

例:查找老师年龄和同学年龄相等的

select  name,age  from students where age  in (select age from teachers);

(3)用于EXISTS

用于from子句中的子查询:

例:

select s.aage,s.classID from (select avg(age) as aage,classID from students where classID is not null group by classID) as s where s.aage30;

联合查询:把两个表查询的结果合并成一个。

例:

select name,age  from  students  UNION select  name,age  from teachers;
时间: 2024-08-06 11:39:05

MySQL 查询语句select讲解与练习的相关文章

MySQL 查询语句SELECT和数据条件过滤

MySQL 查询语句SELECT ,主要是用 * 表示任意字段,也可以写id,name,content 等,数据条件过滤主要是between,and,or ,WHERE,in,like,limit,not in等. 1,查询语句SELECT的用法 select * from biao 2,查询语句数据条件的用法where 条件的开始and 并联关系or 或者的关系between 两者之间like 模糊查询limit 限制查询的条数in 在什么里面not in 不在什么里面 文章来自(www.dc

MySQL 查询语句使用进阶

MySQL 查询语句使用进阶 =============================================================================== 概述: =============================================================================== 练习: 练习1  首先导入hellodb.sql的脚本文件,查询其数据库和表如下: [[email protected] ~]# mysql 

mysql查询语句

mysql查询语句常用SELECT命令打印当前的日期和时间select now();打印当前的日期select curdate();打印当前时间select curtime();查看当前版本select version();打印当前用户select user();查看当前数据库实例select database();查看系统中可用的变量show variables;查看系统中全局变量show global variables;一般查询系统可用变量或是全局变量都是通过like的方式来进行查询的,因

【个人笔记】MySQL查询语句

最近学习了MySQL,分享一点其中查询语句的使用 语法:select  显示的内容  from  查询的范围   where   查询的条件 (显示全部内容用'*'号) 一.as 别名(可省略as) 例:select   stuname  as  '学生姓名'   form   t_student   where  stuname='张三',此句的意思是将学生表中姓名为'张三'的学生筛选出来,并将选出来的列重新命名为'学生姓名'. 二.distinct  筛选重复的数据 三.筛选条件有: and

直接从命令行获取MySQL查询语句结果

如果你需要直接从命令行获取MySQL查询语句结果,那么你可以使用-B和-N这两个参数来达到目的. 例:获取MySQL用户数. [[email protected] ~]# mysql -BN -uroot -predhat mysql -e 'select count(*) from user' 6 [[email protected] ~]# -B参数:去掉边框 -N参数:只显示结果

mysql学习——mysql查询语句综合练习

练习一: 设有成绩表stu如下: 姓名 科目 成绩 张三 数学 90 张三 语文 50 张三 地理 40 李四 语文 55 李四 政治 45 王五 政治 30 王五 数学 70 试查询两门及两门以上不及格同学的平均分 解答如下 1.创建数据表 create table stu(id int primary key auto_increment,name char(3) not null default'',subject char(3) not null default'',score deci

MySQL 查询语句执行顺序

Mysql查询语句时候一共分为11步,其中每一个操作都会产生一张虚拟的表,这个虚拟的表作为一个处理的输入,只是这些虚拟的表对用户来说是透明的,但是只有最后一个虚拟的表才会被作为结果返回. 语句执行顺序 : 顺序 名称 内容 1 SELECT 命令发起 2 * 或 AVG(字段)等 查询内容 3 FROM 查询位置 4 WHERE 条件查询 5 GROUP BY 分组 6 HAVING 筛选 7 ORDER BY (ASC/DESC) 排序 8 LIMIT 限制结果数 1.单表查询 查询指定的列

如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?

如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?(2006-12-14 09:25:36) 与这个问题具有相同性质的其他描述还包括:如何在SQL Server存储过程中获取另一存储过程的执行结果记录集?如何在存储过程中检索动态SQL语句的执行结果?如何实现类似SELECT * FROM (EXEC procedure_name @parameters_var) AS datasource ... 的功能?procedure_

mysql 查询语句可以使用的函数总结

mysql 查询语句有时候需要用到函数,但是函数比子查询的效率要高,有时候函数还是很方便的,下面简单总结sql函数具体用法. 1,对数字处理函数avg()count()max()min()sum()2,对字符串的处理合并字符串函数:concat(str1,str2,str3-)比较字符串大小函数:strcmp(str1,str2)获取字符串字节数函数:length(str)获取字符串字符数函数:char_length(str)字母大小写转换函数:大写:upper(x),ucase(x):小写lo