mysql基本查询

1.条件
使用 where 子句对表中的数据筛选,结果为true的行会出现在结果集中,语法如下:
select * from 表名 where 条件;
例:select * from students where id = 1;
where 后面支持多种条件运算符,进行条件的处理:
  比较运算符;
  逻辑运算符;
  模糊查询;
  范围查询;
  空判断;
1.1.比较运算符
  等于: =
  大于: >
  大于等于: >=
  小于: <
  小于等于: <=
  不等于: != 或 <>
1.2.逻辑运算符
  and or not
1.3.模糊查询 like
  % 表示任意多个任意字符
  select * from students where name like "贝%";
  _ 表示一个任意字符
  select * from students where name like "贝_塔";
  rlike "str" 表示字段中存在"str"字符
  select * from students where name rlike "吉";
1.4.范围查询
  in() 范围
  = any|some() 任意一个,等价 in
  = all() 等于所有的
  <> all() 不等于其中任何一项

2.排序
将查询的结果进行排序 order by 字段名 asc(升序)|desc(降序) ,如果不写默认升序
例:将未被删除的学生按照id降序排序
select * from students where isdelete=0 order by id desc;

3.聚合函数
  count() 统计数量 , max() 求最大值, min() 求最小值, sum() 求和, avg() 求平均值
例1:求所有学生数量
select count(*) from students;
例2:求学生中的最大年龄
select max(age) from students;
例3:求学生中的最小年龄
select min(age) from students;
例4:求所有学生的年龄总和
select sum(age) from students;
例5:求学生的平均年龄
select avg(age) from students;

4.分组
按照字段分组,表示此字段相同的数据会被放到一个组中分组后,分组的依据列会显示在结果集中,
其他列不会显示在结果集中可以对分组后的数据进行统计,做聚合运算。
select 列1,列2,聚合... from 表名 group by 列1,列2,列3... having 列1,...聚合...
例1:以性别分组查看分别有多少人
select gender,count(*) from students group by gender;
例2:查看男生人数
select gender,count(*) from students group by gender having gender="男";
对比 where 和 having :
  where 是对from后面指定的表进行数据筛选,属于对原始数据的筛选.
  having 是对group by的结果进行筛选.

5.分页
当数据量过大时,在一页中查看数据是一件非常麻烦的事情
语法 select * from 表名 limit start,count
从start开始,获取count条数据,start索引从0开始
例1:查询前两行男生的信息
select * from students where gender="男" limit 0,2;
例2:已知每页显示m条数据,当前显示第n页,求第n页的数据
select * from students where isdelete=0 limit (n-1)*m,m;

6.连接查询
当查询结果的列来源于多张表时,需要将多张表连接成一个大的数据集,再选择合适的列返回
mysql支持三种类型的连接查询,分别为:
内连接查询 inner join ...on :查询的结果为两个表匹配到的数据
右连接查询 right outer join ...on :查询的结果为两个表匹配到的数据,右表特有的数据,对于左表中不存在的数据使用null填充
左连接查询 left outer join ...on :查询的结果为两个表匹配到的数据,左表特有的数据,对于右表中不存在的数据使用null填充
例1:使用内连接查询学生表和班级表
select * from students inner join classes on students.cls_id = classes.id;
例2:使用右连接查询学生表和班级表
select * from students as s right outer join classes as c on s.cls_id=c.id;
例3:使用左连接查询学生表和班级表
select * from students as s left outer join classes as c on s.cls_id=c.id;

7.子查询
在一个 select 语句中,嵌入了另外一个 select 语句, 那么被嵌入的 select 语句称之为子查询语句
主查询和子查询的关系:
  子查询是嵌入到主查询中
  子查询是辅助主查询的,要么充当条件,要么充当数据源
  子查询是可以独立存在的语句,是一条完整的 select 语句
子查询分类:
  标量子查询: 子查询返回的结果是一个数据(一行一列)
  列子查询: 返回的结果是一列(一列多行)
  行子查询: 返回的结果是一行(一行多列)
  表级子查询: 返回的结果是多行多列
例:查询班级里大于平均年龄的学生数量
select count(*) from students where age > (select avg(age) from students);

总结
查询的完整格式:
SELECT select_expr [,select_expr,...] [
  FROM tb_name
  [WHERE 条件判断]
  [GROUP BY {col_name | postion} [ASC | DESC], ...]
  [HAVING WHERE 条件判断]
  [ORDER BY {col_name|expr|postion} [ASC | DESC], ...]
  [ LIMIT {[offset,]rowcount | row_count OFFSET offset}]

完整的select语句:
  select distinct *
  from 表名
  where ....
  group by ... having ...
  order by ...
  limit start,count

时间: 2024-10-07 14:14:43

mysql基本查询的相关文章

mysql子查询慢的问题

当你在用explain工具查看sql语句的执行计划时,若select_type 字段中出现"DEPENDENT SUBQUERY"时,你要注意了,你已经掉入了mysql子查询慢的"坑"...下面我们来看一个具体的例子 有这样一条查询语句: SELECT gid,COUNT(id) as count FROM shop_goods g1 WHERE status =0 and gid IN (SELECT gid FROM shop_goods g2 WHERE si

Mysql——子查询

子查询的位置: select 中.from 后.where 中.group by 和order by 中无实用意义. 子查询分为如下几类: 1,标量子查询:返回单一值的标量,最简单的形式. 2,列子查询:返回的结果集是 N 行一列. 3,行子查询:返回的结果集是一行 N 列. 4,表子查询:返回的结果集是 N 行 N 列. 可以使用的操作符:= > < >= <= <> ANY IN SOME ALL EXISTS 标量子查询:是指子查询返回的是单一值的标量,如一个数字

mysql 怎么查询出,分组后的总条数。。。也就是有多少组数。。。。怎么写

SELECT COUNT(*) AS 多少组数FROM( SELECT id FROM 表 GROUP BY id) subQuery;Mysql,有一个表含有以下字段,uid 发帖人id,title 发帖标题,tc 发帖内容,time 发帖时间,用一条语句算出昨天发帖书大于10的,一共有多少人? select count(*) from (select distinct startperson_id,count(startperson_id) as num from apphome_finan

Mysql慢查询日志脚本

#!/bin/bash LOG=/diskb/mysql/slowlog/   #定义日志存储路径 DATE=`date +"%Y-%m-%d"`   #定义时间参数 user=root                                 #填写MySQL账户信息 passwd=123456 mysql -u$user -p$passwd -e "set global slow_query_log=0" #停止mysql慢查询日志 mysql -u$us

mysql慢查询日志分析工具mysqlsla

一.介绍    mysqlsla是一个分析mysql慢日志的工具,可以分析出慢查询的原因,包括执行某条sql出现的次数及在slow log数据的百分比.执行时间.等待销的时间等. 公司的数据库有很多慢查询日志,导致的系统的负载很高,而mysql慢查询日志文件内容格式不太好看,经推荐使用mysqlsla:使用方便,操作简单. 二.安装mysqlsla 系统环境 CentOS release 6.6 (Final) 2.6.32-504.el6.x86_64 官网已经不能下载,所需要的文件已在百度云

MySQL 列子查询及 IN、ANY、SOME 和 ALL 操作符的使用

列子查询是指子查询返回的结果集是 N 行一列,该结果通常来自对表的某个字段查询返回. 一个列子查询的例子如下: SELECT * FROM article WHERE uid IN(SELECT uid FROM user WHERE status=1) 该例子在前文<MySQL 子查询subquery语法与用法实例>已有解释及数据实例,在此不再赘述. 列子查询中使用 IN.ANY.SOME 和 ALL 操作符 由于列子查询返回的结果集是 N 行一列,因此不能直接使用 = > <

Mysql慢查询日志过程

原创地址 :http://itlab.idcquan.com/linux/MYSQL/922126.html mysql慢查询日志对于跟踪有问题的查询非常有用,可以分析出代码实现中耗费资源的sql语句,对我们程序的优化有很高的参考.本篇主要将慢查询日志的开启,日志分析,这也是优化SQL程序的一般步骤中至关重要的一步. 1.mysql慢查询日志 打开mysql的慢查询日志很简单,只需要在mysql的配置文件里(windows系统是my.ini,linux系统是my.cnf)的[mysqld]下面加

MySQL 慢查询

简述: 分析MySQL语句查询性能的方法除了使用 EXPLAIN 输出执行计划,还可以让MySQL记录下查询 超过指定时间的语句,我们将超过指定时间的SQL语句查询称为“慢查询”. 它能记录下所有执行超过 long_query_time时间的SQL语句, 帮你找到执行慢的SQL,  方便我们对这些SQL进行优化. 在优化MySQL时,通常需要对数据库进行分析,常见的分析手段有 慢查询日志,EXPLAIN 分析查询, profiling分析 以及 show命令查询系统状态及系统变量,通过定位分析性

MySQL慢查询日志相关的配置和使用。

MySQL慢查询日志提供了超过指定时间阈值的查询信息,为性能优化提供了主要的参考依据,是一个非常实用的功能,MySQL慢查询日志的开启和配置非常简单,可以指定记录的文件(或者表),超过的时间阈值等就可以记录到慢sql了,实话讲,相比较sqlserver的trace或者扩展事件(虽然此二者的作用并非仅仅如此),MySQL的配置总是给人一种非常清爽的感觉. 1,慢查询日志的打开 正常情况下,只需要在配置文件中增加slow_query_log = 1配置,即打开慢查询日志,未指定slow_query_

Mybatis使用MySQL模糊查询时输入中文检索不到结果怎么办--转自http://www.jb51.net/article/88236.htm

这篇文章主要介绍了Mybatis使用MySQL模糊查询时输入中文检索不到结果的解决办法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 项目开发中,在做Mybatis动态查询时,遇到了一个问题:MySQL在进行LIKE模糊查询时,输入英文可以正常检索出结果,但是输入中文后检索得到的结果为空. 由于是使用GET方式请求,所以为了确保中文不乱码,在控制台接收到请求参数后,对中文进行了一次编码. ? 1 2 3 4 5 try { realName = new String(realNam