MySQL —— 基本查询方法

MySQL —— 简单查询与按条件查询

在MySQL中从数据表中查询数据的基本语句时select语句。
  select语句基本语法格式:
      select 查询内容 
      from 表名
      where 表达式
      group by 字段名
      having 表达式
      order by 字段名
      limit 记录数
每一个select语句由多个子句组成。

1. from 表名 指定是从那张表中查询

2. select 查询内容

查询所有字段 select * from 表名
*通配符:表示所有字段

mysql> select * from test;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    1 | A    |    4 |
|    2 | B    |    7 |
|    3 | C    |    5 |
|    4 | D    |   12 |
+------+------+------+
4 rows in set (0.06 sec)

查询部分字段 select 字段名 from 表名;

mysql> select name from test;
+------+
| name |
+------+
| A    |
| B    |
| C    |
| D    |
+------+
4 rows in set (0.00 sec)

在MySQL表中,每个字段的数据可以当做变量处理
查询所需的某个字段数据处理后的结果:select 字段处理方式 from 表名

mysql> select age-3  from test;
+-------+
| age-3 |
+-------+
|     1 |
|     4 |
|     2 |
|     9 |
+-------+
4 rows in set (0.11 sec)

3. where 表达式 (按条件查询)

在MySQL的表查询时,往往并不是需要将所有内容全部查出,而是根据实际需求,查询所需数据
select 查询内容 from 表名 where 表达式;

在MySQL语句中,条件表达式是指select语句的查询条件,在where子句中可以使用关系运算符
接操作数作为查询条件对数据进行选择。
关系运算符:
=   等于
<>  不等于
!=  不等于
<   小于
>   大于
<=  小于等于
>=  大于等于

例如查询年龄大于5的信息

mysql> select * from test where age > 5;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    2 | B    |    7 |
|    4 | D    |   12 |
+------+------+------+
2 rows in set (0.04 sec)

in的关键字查询

查询某个指定集合内的记录 select 查询内容 from 表名 where 条件 in(指定内容);

mysql> select * from test where age in (5, 12);
+------+------+------+
| id   | name | age  |
+------+------+------+
|    3 | C    |    5 |
|    4 | D    |   12 |
+------+------+------+
2 rows in set (0.00 sec)

带有between and 关健字查询

查询某个在给定范围内的记录 select 查询内容 from 表名 where 条件 between 值1 and 值2

mysql> select * from test where age between 5 and 12;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    2 | B    |    7 |
|    3 | C    |    5 |
|    4 | D    |   12 |
+------+------+------+
3 rows in set (0.07 sec)

查询某些为空NULL  或 非空的记录 select 查询内容 from 表名 where 条件 is(not) NULL

mysql> select * from test where age is NULL;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    6 | F    | NULL |
+------+------+------+
1 row in set (0.00 sec)

在查询时过滤掉重复的值:select distinct 字段名 from 表名;字段名表示要过滤重复记录的字段

mysql> select num from a;
+------+
| num  |
+------+
|    5 |
|   10 |
|   15 |
|   10 |
|   15 |
|    5 |
|   10 |
+------+
7 rows in set (0.00 sec)
mysql> select distinct num from a;
+------+
| num  |
+------+
|    5 |
|   10 |
|   15 |
+------+
3 rows in set (0.00 sec)

在使用distinct指定多个字段时,只有被指定的这些字段的值都相同,才会被认为是重复的

在查询具有一类相同特征的数据时,需要用到模糊查询,这是就需要使用like关键字
select 查询内容 from 表名 where 内容 (not) like ‘匹配的字符串’
百分号通配符 %:表示匹配任意长度的任意字符串

mysql> select name from name;
+------+
| name |
+------+
| 1112 |
| 1122 |
| 1222 |
| 2111 |
+------+
4 rows in set (0.00 sec)
mysql> select name from name where name like ‘11%‘;
+------+
| name |
+------+
| 1112 |
| 1122 |
+------+
2 rows in set (0.00 sec)

下划线通配符 _ :表示匹配任意单个字符,如果需要匹配多个字符,则需要使用多个 _

mysql> select name from name where name like ‘11__‘;
+------+
| name |
+------+
| 1112 |
| 1122 |
+------+
2 rows in set (0.00 sec)

如果需要查询带有 % 或 _ 的数据,由于 % 和 _ 是通配符,则需要使用 \ 进行转义
\% 表示 %,\_ 表示 _

有时在查询时为了查询结果更加精确,需要多个限条件,这时就需要 and(&&) 来连接条件

mysql> select cat_id, cat_name, parent_id from category;
+--------+---------------------------+-----------+
| cat_id | cat_name                  | parent_id |
+--------+---------------------------+-----------+
|      1 | 手机类型                  |         0 |
|      2 | CDMA手机                  |         1 |
|      3 | GSM手机                   |         1 |
|      4 | 3G手机                    |         1 |
|      5 | 双模手机                  |         1 |
|      6 | 手机配件                  |         0 |
|      7 | 充电器                    |         6 |
|      8 | 耳机                      |         6 |
|      9 | 电池                      |         6 |
|     11 | 读卡器和内存卡            |         6 |
|     12 | 充值卡                    |         0 |
|     13 | 小灵通/固话充值卡         |        12 |
|     14 | 移动手机充值卡            |        12 |
|     15 | 联通手机充值卡            |        12 |
+--------+---------------------------+-----------+
14 rows in set (0.00 sec)
mysql> select cat_id, cat_name, parent_id from category
    -> where cat_id > 7 and parent_id = 6;
+--------+-----------------------+-----------+
| cat_id | cat_name              | parent_id |
+--------+-----------------------+-----------+
|      8 | 耳机                  |         6 |
|      9 | 电池                  |         6 |
|     11 | 读卡器和内存卡        |         6 |
+--------+-----------------------+-----------+
3 rows in set (0.05 sec)

有时在查询时,只需要数据满足某些条件中的某一个,这时就需要使用 or(||) 来连接条件

mysql> select cat_id, cat_name, parent_id from category where cat_id = 3 or cat_id = 9;
+--------+-----------+-----------+
| cat_id | cat_name  | parent_id |
+--------+-----------+-----------+
|      3 | GSM手机   |         1 |
|      9 | 电池      |         6 |
+--------+-----------+-----------+
2 rows in set (0.02 sec)

注意:在查询时,and 的优先级高于 or

聚合函数:

count()函数:统计记录条数 select count(记录) from 表名

mysql> select * from test;
  +------+------+------+
  | id   | name | age  |
  +------+------+------+
  |    1 | A    |    4 |
  |    2 | B    |    7 |
  |    3 | C    |    5 |
  |    4 | D    |   12 |
  |    5 | E    |    0 |
  |    6 | F    | NULL |
  +------+------+------+
  6 rows in set (0.01 sec)
  mysql> select count(name) from test;
  +-------------+
  | count(name) |
  +-------------+
  |           6 |
  +-------------+
  1 row in set (0.09 sec)

sum()函数:计算表中某个字段值的总和,select sum(字段名) from 表名

mysql> select sum(age) from test;
+----------+
| sum(age) |
+----------+
|       28 |
+----------+
1 row in set (0.00 sec)

avg()函数:计算表中某个字段的平均值 select avg(字段名) from 表名

  mysql> select avg(age) from test;
  +----------+
  | avg(age) |
  +----------+
  |   5.6000 |
  +----------+
  1 row in set (0.00 sec)

  max()函数:返回表中某个字段中的最大值

  mysql> select max(age) from test;
  +----------+
  | max(age) |
  +----------+
  |       12 |
  +----------+
  1 row in set (0.04 sec)

  min()函数:返回表中某个字段中的最小值

  mysql> select min(age) from test;
  +----------+
  | min(age) |
  +----------+
  |        0 |
  +----------+
  1 row in set (0.00 sec)

  分组查询:

在对数据表中的数据进行统计时,需要将数据按照一定的特征分组统计,此时就需
    要使用分组查询  select 查询内容 from 表名 group by 分组依据 [having表达式条件]

  mysql> select * from test;
  +------+------+------+-------+
  | id   | name | age  | class |
  +------+------+------+-------+
  |    1 | A    |    4 |     1 |
  |    2 | B    |    7 |     1 |
  |    3 | C    |    5 |     1 |
  |    4 | D    |   12 |     2 |
  |    5 | E    |    0 |     2 |
  |    6 | F    |    8 |     3 |
  +------+------+------+-------+
  6 rows in set (0.00 sec)

  mysql> select max(age) from test group by class;
  +----------+
  | max(age) |
  +----------+
  |        7 |
  |       12 |
  |        8 |
  +----------+
  3 rows in set (0.03 sec)

对查询结果进行排序
    select 查询内容 from 表名 order by 排序条件 asc/desc,asc表示升序 desc表示降序

  mysql> select name, age from test order by age asc;
  +------+------+
  | name | age  |
  +------+------+
  | E    |    0 |
  | A    |    4 |
  | C    |    5 |
  | B    |    7 |
  | F    |    8 |
  | D    |   12 |
  +------+------+
  6 rows in set (0.00 sec)
  mysql> select name, age from test order by age desc;
  +------+------+
  | name | age  |
  +------+------+
  | D    |   12 |
  | F    |    8 |
  | B    |    7 |
  | C    |    5 |
  | A    |    4 |
  | E    |    0 |
  +------+------+

限制查询:
    在查询时,可能需要只显示部分数据,这是需要限制查出来的数据数量
    select 查询内容 from 表名 limit 偏移量m 记录数n,表示从第m+1个记录开始查询出n条记录

  mysql> select name, age from test order by age asc limit 2, 2;
  +------+------+
  | name | age  |
  +------+------+
  | C    |    5 |
  | B    |    7 |
  +------+------+
  2 rows in set (0.00 sec)

where 与 having:
    where 与 having关键字都用于设置条件表达式对查询结果进行过滤,区别是having后面可以跟聚合
    函数,而where不能,通常having关键字都与group by 一起使用,表示对分组后的数据进行过滤

原文地址:https://www.cnblogs.com/lyg0126/p/9661405.html

时间: 2024-08-29 14:37:54

MySQL —— 基本查询方法的相关文章

MySQL常用查询方法

SELECT TIME(NOW()); -- 15:23:07 SELECT CURTIME(NOW());-- 15:23:07 SELECT ABS(-4); -- 4 SELECT 5 MOD 3; -- 2 SELECT CURDATE(); -- 2014-08-25 SELECT ADDDATE(CURDATE(), 1); -- 2014-08-26 SELECT DATE_ADD(CURDATE(),INTERVAL 1 DAY); -- 2014-08-26 SELECT DA

MYSQL 查询方法

mysql表格查询方法: 查询: 1.简单查询 select * from Info --查所有数据select Code,Name from Info --查指定列的数据select Code as '代号',Name as '姓名' from Info --给列指定别名 2.条件查询 select * from Info where Code='p001'select * from Info where Sex='true' and Nation='n001' --多条件并的关系select

各种数据库分页查询方法

具体实现中,根据所用数据库.数据量.实现分页方式,选择分页实现快的方式实现. 一.MYSQL分页查询方法 MYSQL分页查询主要使用其自带的limit函数,但需根据查询量来决定具体的使用方式,如只有几千或几万数据,则直接用 limit m,n方式, 如数据量较多,则要注意limit的使用方式. // limit m , n:从第 m 条数据开始,获取 n 条数据 1.数据量少的方式:select * from tablename limit m,n; // limit m , n:m 可省略,省

数据库基础查询方法

mysql表格查询方法: 查询: 1.简单查询 select * from Info --查所有数据select Code,Name from Info --查指定列的数据select Code as '代号',Name as '姓名' from Info --给列指定别名 2.条件查询 select * from Info where Code='p001'select * from Info where Sex='true' and Nation='n001' --多条件并的关系select

mysql开启慢查询方法

1,配置开启 Linux: 在mysql配置文件my.cnf中增加 log-slow-queries=/var/lib/mysql/slowquery.log (指定日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.log)long_query_time=2 (记录超过的时间,默认为10s)log-queries-not-using-indexes (log下来没有使用索引的query,可以根据情况决定是否开启)log-long-format (如果设置了,所有没有

mysql慢查询分析工具和分析方法

1.mysql慢查询分析工具 1.参考文档: http://www.ttlsa.com/mysql/analyse-slow-query-log-using-anemometer/ http://isadba.com/?p=655 官方文档: https://github.com/box/Anemometer 数据库管理员一般是用percona的toolkit工具来分析MySQL慢查询记录,但是不够直观. 下面介绍一款比较直观的工具来统计分析MySQL慢查询记录anemometer. 在使用之前

mysql随机查询记录的高效率方法

mysql使用rand随机查询记录的高效率方法 一直以为mysql随机查询几条数据,就用 SELECT * FROM `table` ORDER BY RAND() LIMIT 5 就可以了. 但是真正测试一下才发现这样效率非常低.一个15万余条的库,查询5条数据,居然要8秒以上 查看官方手册,也说rand()放在ORDER BY 子句中会被执行多次,自然效率及很低. You cannot use a column with RAND() values in an ORDER BY clause

mysql多表查询方法(left join(左连接),right join (右连接),inner join (内连接)的区别)

表A记录如下:  aID aNum  1 a20050111  2 a20050112  3 a20050113  4 a20050114  5 a20050115  表B记录如下:  bID bName  1 2006032401  2 2006032402  3 2006032403  4 2006032404  8 2006032408  创建这两个表SQL语句如下:  CREATE TABLE a  aID int( 1 ) AUTO_INCREMENT PRIMARY KEY ,  a

转载:30多条mysql数据库优化方法,千万级数据库记录查询轻松解决

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描, Sql 代码 : select id from t where num is null; 可以在 num 上设置默认值 0,确保表中 num 列没有 null 值,然后这样查询: Sql 代码 : select id from t where num=0; 3.应尽量避免在 wh