MySQL简单查询详解

MySQL的查询操作

单表查询:简单查询

多表查询:连接查询

联合查询

布尔条件表达式操作符

   = 等值比较
   <=>:跟空值比较不会产生额外信息的等值比较
   <>:不等值
   <: 
   <=:
   >
   >=
   IS NULL
   IS NOT NULL    
   LIKE: 
      支持的通配符: %(任意长度的任意字符),_(任意单个字符)
   RLIKE,REGEXP: 支持使用正则表达式
   IN: 判断指定字段的值是否在给定在列表中;  
   BETWEEN ... AND ...: 位于指定的范围之间(x>=10 and x<=40 --> x BETWEEN 10 AND 20)

示例

新创建一个表
mysql> create table tests (sid int unsigned auto_increment not null unique key,name char(30) 
    not null,age tinyint unsigned not null,gender enum(‘F‘,‘M‘) not null,tutor char(30));

添加几个用户
mysql> insert into tests values (1,‘Guo Jing‘,27,‘M‘,‘Song Jiang‘),
    (2,‘Yang Guo‘,28,‘M‘,‘Hu Sanniang‘),(3,‘Guo Polu‘,21,‘M‘,‘Jia Baoyu‘);
    
mysql> insert into tests values (4,‘Xue Baochai‘,‘19‘,‘F‘,‘Rong Momo‘),
      (5,‘Xia Yuhe‘,37,‘F‘,‘Shi Qian‘),(6,‘Wu Yong‘,51,‘M‘,‘Lin Daiyu‘);

BETWEEN...AND...语法演示

mysql> select name,age from tests where age between 25 and 40;

IN 语法演示

mysql> select name,age from tests where age in (25,26,27,28,29);

LIKE 语法演示

mysql> select name from tests where name like ‘x%‘;

RLIKE 语法演示

mysql> select name from tests where name rlike ‘^x.*‘;

//添加两行新的数据
//NULL不是字符串 不需要加引号
mysql> insert into tests values (7,‘tom‘,11,‘M‘,‘jerry‘),(8,‘tomy‘,13,‘M‘,NULL);

IS NULL

mysql> select name,tutor from tests where tutor is null;

NOT NULL

mysql> select name,tutor from tests where tutor is not null;

组合条件测试

NOT, !
AND, &&
OR, ||

示例

mysql> select name,gender,age from tests where age > 25 and gender=‘M‘;

排序

order by ‘排序字段’
默认为升序:ASC
降序:DESC

示例

mysql> select name,gender,age from tests where age > 25 and gender=‘M‘ order by name;
mysql> select name,gender,age from tests where age > 25 and gender=‘M‘ order by name desc;

聚合函数

 SUM(), AVG(), MAX(), MIN(), COUNT()

示例

mysql> select sum(age) from tests;
mysql> select avg(age) from tests;
mysql> select max(age) from tests;
mysql> select count(age) from tests;

mysql> select count(*) from tests where age > 25;
//年龄大于25的有4个

mysql> select sum(age) from tests where age > 25;
//年龄大于25的所有年龄之和

分组

group by

示例

mysql> select gender,sum(age) from tests group by gender;

mysql> alter table tests add classid tinyint unsigned;
//为表新添加一个字段

插入数据
mysql> update tests set classid=1 where sid=1;
...
...

mysql> select classid,count(*) from tests group by classid; 或者
mysql> select classid,count(name) from tests group by classid;
//按班级分类 每班有多少人

mysql> select classid,count(name),sum(age) from tests group by classid;
每个班的人的年龄之和

对分组(group by)的条件过滤

having
    注意:使用having和不是使用where

示例

mysql> select classid,count(*) from tests group by classid having count(*) >= 2;

mysql> select classid,count(*),sum(age) from tests group by classid having sum(age) <= 50;

mysql> select classid,count(name),sum(age) from tests where classid in (1,2) group by classid havingsum(age) <= 50;
//注意where过滤和having过滤 分别出现的位置

只返回有用的行

LIMIT 
一个数为显示的行数
两个数字为偏移第一个数字行,显示第二个数字

示例

mysql> select * from tests limit 2;
mysql> select * from tests limit 2,3;

select语句

distinct   重复的只显示一次
SQL_CACHE  缓存查询结果
SQL_NO_CACHE 不缓存查询结果

示例

mysql> select age from tests order by age; 
mysql> select distinct age from tests order by age;

总结

select语句的执行流程

from clause --> where clause --> group by --> having clause -->order by -->

select -->limit

常见用法

select
from
order by
select
from
group by
having
select
from
where
select -->调用内部函数
select
from
where
group by
limit
时间: 2024-12-30 00:00:45

MySQL简单查询详解的相关文章

MySQL慢查询详解

分析MySQL语句查询性能的方法除了使用 EXPLAIN 输出执行计划,还可以让MySQL记录下查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称为“慢查询”. 查看/设置“慢查询”的时间定义 mysql> show variables like "long%"; +-----------------+----------+ | Variable_name   | Value    | +-----------------+----------+ | long_quer

mysql简单的单表查询详解

mysql简单的单表查询详解 MySQL的查询操作: 单表查询:简单查询 多表查询:连续查询 联合查询: 选择和投影: 投影:挑选要显示的字段 选择:挑选符合条件的行 投影:SELECT 字段1, 字段2, ... FROM tb_name;  SELECT * FROM tb_name; 选择:SELECT 字段1, ... FROM tb_name WHERE 子句; 布尔条件表达式 mysql> CREATE TABLE students (SID INT UNSIGNED AUTO_IN

Mysql高手系列 - 第12篇:子查询详解

这是Mysql系列第12篇. 环境:mysql5.7.25,cmd命令中进行演示. 本章节非常重要. 子查询 出现在select语句中的select语句,称为子查询或内查询. 外部的select查询语句,称为主查询或外查询. 子查询分类 按结果集的行列数不同分为4种 标量子查询(结果集只有一行一列) 列子查询(结果集只有一列多行) 行子查询(结果集有一行多列) 表子查询(结果集一般为多行多列) 按子查询出现在主查询中的不同位置分 select后面:仅仅支持标量子查询. from后面:支持表子查询

MySQL中EXPLAIN详解

MySQL中EXPLAIN详解 explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. 使用方法,在select语句前加上explain就可以了: 如:explain select username,first_name form hx,itlearner where a.id=b.id EXPLAIN列的解释: id:本次 select 的标识符.在查询中每个 select都有一个顺序的数值. select_type :查询类

MySQL数据库优化详解(收藏)

MySQL数据库优化详解 mysql表复制 复制表结构+复制表数据mysql> create table t3 like t1;mysql> insert into t3 select * from t1;mysql索引 ALTER TABLE用来创建普通索引.UNIQUE索引或PRIMARY KEY索引ALTER TABLE table_name ADD INDEX index_name (column_list)ALTER TABLE table_name ADD UNIQUE (colu

sql语句联合查询详解

sql语句联合查询详解 2011-03-01 18:58:22|  分类: mysql|举报|字号 订阅 例子: person表和user表没有约束person表: user表: 有以下几种关联 1.UNION 格式:查询语句 UNION [ALL] 查询语句 [UNION [ALL] 查询语句][…n] 说明:ALL选项表示将所有行合并到结果集合中.不指定该项时,被联合查询结果集合中的重复行将只保留一行. 在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序.例

MySQL主从架构详解

1.复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置.从服务器接收

Mysql 配置参数详解以及优化配置

mysql有以下几种日志: 错误日志:   log-err 查询日志:   log 慢查询日志:  log-slow-queries 更新日志:   log-update 二进制日志: log-bin 要把日志生成在 /var/log 目录下(是系统日志存放的地方,只有 root 账号有写权限),需要 MySQL进程对这个目录有读写权限,一般是不这么做的,也考虑到安全问题,包括 MySQL 本身的数据安全,因为对 MySQL 的所有操作,都会记录到常规查询日志.MySQL的日志就不要用 /var

mysql触发器用法详解

MySQL触发器语法详解: 触发器 trigger是一种特殊的存储过程,他在插入(inset).删除(delete)或修改(update)特定表中的数据时触发执行,它比数据本身标准的功能更精细和更复杂的数据控制能力.触发器不是由程序调用,而是由某个事件来触发的.在有数据修改时自动强制执行其业务规则,经常用于加强数据的完整性约束和业务规则等.触发器可以查询其他表,而且包含复制的sql语句.触发器也可用于强制引用完整性.触发器可以强制比用check约束定义的约束更为复杂的约束. (一).CREATE