MySQL:数据查询

数据查询

一、基本查询语句

1、语法:写一行

select{*<字段列表>}//查询的字段,多个字段用逗号分开
from<表1>,<表2>…//数据表名
{//可选
[where<表达式>]//限定条件,只能放一个。

2、实例

mysql> select * from publisher;
+----+-----+------+
| bh | cbs | bz   |
+----+-----+------+
| 01 | 2   | 1111 |
| 02 | 3   | 1111 |

二、单表查询

1、用于查询的比较运算


操作符


含义


操作符


含义


操作符


含义


=


等于(不是==)


<=


小于、等于


in(set)


等于值列表中的一个


>


大于


<>(!=)


不等于


like


模糊查询


>=


大于、等于


:=


赋值


is (not)null


(不是)空值


<


小于


betwee…and


在两值之间

2、比较运算符的优先级


优先级


运算符


优先级


运算符


1


算术运算符


5


[NOT] BETWEEN


2


连接符


6


NOT


3


比较符


7


AND


4


IS [NOT] NULL, LIKE, [NOT] IN


8


OR

3、查询所有字段

语法:

select * from 表名(心号两边有空格)

4、查询指定字段,所有记录

语法:

select 字段名1…字段名n from 表名 where 条件表达式

5、给显示的列名重新命名

语法:

select 字段1 as 列名1[字段2 as 列名2……字段n as 列名n] from 表名

6、查询指定记录,单个记录

语法:

select 字段名1…字段n from 表名 where 条件

7、带IN关键字的查询

作用:用于查询指定范围内的条件记录,只要满足条件范围内的一个值即为匹配项
语法:

select 字段 from 数据表 where 指定字段(not)in(取值条件,取值条件1)等于where 指定字段=取值条件 or指定字段=取值条件1(order by 字段//条件可选);

【附】加not代表不在这个范围的值

实例:

mysql> select bh,cbs from publisher where bh in(01,09) order by cbs;
+----+-----+        bh的值为01,09输出结果
| bh | cbs |
+----+-----+
| 09 | 10  |
| 01 | 2   |
+----+-----+

8、带BETWEEN AND的范围查询

作用:查询每个范围内的值

语法:

select 显示结果的列 from 数据表名 where 条件的列 between 范围的开始值 and 范围的结束值;

字段名>=起始值 and 字段名<=结束值
两个表达式字段名相同,值不同
实例:

mysql> select bh,cbs from publisher where cbs between 7 and 09;
+----+-----+
| bh | cbs |
+----+-----+
| 06 | 7   |
| 07 | 8   |
| 08 | 9   |
+----+-----+

9、带LIKE的字符匹配查询

作用:查询某个字符,如“apple”“grape”“coconut”中带“a”的字段
通配符:用于where的特殊字符
(1)、“%”匹配任意长度的字符,甚至包括零字符,最大字段为数据类型的长度
语法:

select 字段from 数据表名 where 字段(类型必须是char或varchar) like ‘条件%‘;

实例:

1)全部值
mysql> select*from publisher;
+----+-----+------+
| bh | cbs | bz   |
+----+-----+------+
| 01 | 2   | 1111 |
| 02 | 3   | 1111 |
+----+-----+------+

2)取bh列且0在前面的值
mysql> select*from publisher where bh like ‘0%‘;
+----+-----+------+
| bh | cbs | bz   |
+----+-----+------+
| 01 | 2   | 1111 |
| 02 | 3   | 1111 |
+----+-----+------+

3)取列bh且0在后面的值
mysql> select*from publisher where bh like ‘%0‘;
+----+-----+------+
| bh | cbs | bz   |
+----+-----+------+
| 10 | 11  | 1111 |
| 20 | 21  | 1111 |
+----+-----+------+
4)取例bh且有0在的值
mysql> select*from publisher where bh like ‘%0%‘;
+----+-----+------+
| bh | cbs | bz   |
+----+-----+------+
| 01 | 2   | 1111 |
| 02 | 3   | 1111 |
+----+-----+------+

(2)“_”一次只能匹配任意一个字符;
作用:基本和“%”类似
语法:

select 字段from 数据表名 where 列 like ‘条件_‘;(后面两个’条件_ _’)

【例】:
查询bh列且以“1”开头,后面接一个任意符

mysql> select*from publisher where bh like ‘1_‘;
+----+-----+------+
| bh | cbs | bz   |
+----+-----+------+
| 10 | 11  | 1111 |
+----+-----+------+

10、查询空值

空值:一般表示数据未知、不适用或者在将来以后添加数据,它不是空格,或者0.
语法:

select 字段from 数据表名 where 列1 is null and…… and 例n;

11、带AND的多条件查询

条件:满足所有的条件表达式

语法:

select 字段from 数据表名 where 条件表达式1 and 条件表达式2 … and 条件表达式n;

【例】

mysql> select bh,cbs,bz from publisher where bh=10 and cbs=11 and bz=1111;
+----+-----+------+
| bh | cbs | bz   |
+----+-----+------+
| 10 | 11  | 1111 |
+----+-----+------+

12、带0R的多条件查询

条件:满足一个条件表达式
语法:语法:

select 字段from 数据表名 where 条件表达式1 or 条件表达式2… or 条件表达式n;

【例】

mysql> select bh,cbs,bz from publisher where bh=10 or cbs=11 or bz=111;
+----+-----+------+
| bh | cbs | bz   |
+----+-----+------+
| 10 | 11  | 1111 |
+----+-----+------+

【附】and和or联用
【例】

mysql> select bh,cbs,bz from publisher where bh=10 or cbs=11 and bz=111;
+----+-----+------+
| bh | cbs | bz   |
+----+-----+------+
| 10 | 11  | 1111 |
+----+-----+------+

mysql>  select bh,cbs,bz from publisher where bh=10 and cbs=10 or bz=111;
Empty set (0.00 sec)

mysql>  select bh,cbs,bz from publisher where bz=111 or bh=10 and cbs=10;
Empty set (0.00 sec)

说明:and的优先级高于or,因此先对and两边的操作数进行操作,再于or的操作数结合。

13、查询结果不重复

语法:

select distinct 字段名 from 数据表名;

14、对查询结果排序

(1)单列:
语法:

select 要显示的字段from 数据表名 order by 排序依据的字段(聚合函数) desc\asc;

注意:desc降序,asc升序,asc为排序的默认方式
(2)多列:
语法:

select 要显示的字段from 数据表名 order by a desc\asc,b desc\asc ……;

注意:先进行a表的升降序,在进行b表的升降序

15、使用LIMIT限制查询结果的数量-----分页查询

语法:limit [位置偏移量,] 行数
位置偏移量:值从那行开始显示,是可选,如果不指定,从第一条记录开始(第一条记录的位置从0开始,和java的索引相类似)
行数:指示返回的记录
注意:limit 4 offset 3,意思为获取从第五条记录开始后面3条记录,和limit 4,3返回的结果相同。
  【例】select * from dingdan limit 2,3;

二、连接查询------先内在外

1、内连接查询(inner join)

语法:
①select 字段名 fromA表表名,B表表名……where【A表表名.】字段名a=【B表表名.】字段名b=……
②select 字段名 fromA表表名 inner join B表表名on【A表表名.】字段名a=【B表表名.】字段名b
注意:字段a、b必须是有相同意义和相同类型

2、外连接查询

①左外连接:
select 需要的字段名 fromA表表名 left joinB表表名 on A表表名.】字段名=【B表表名.】字段名
A表被称为左表    B表被称为右表
注意:
左外连接,不管连接条件是否满足。都执行一次
右外连接,是否执行,根据连接条件判断
②右外连接:
select 需要的字段名 fromA表表名 right joinB表表名 on A表表名.】字段名=【B表表名.】字段名
A表被称为左表    B表被称为右表
注意:
右外连接,不管连接条件是否满足。都执行一次
左外连接,是否执行,根据连接条件判断

3、连接条件的特点

(1)内连接:满足连接条件记录出现
(2)左外连接:左表记录至少出现一次
(3)满足连接条件,满足出现的记录
(4)不满足,左表记录信息出现,右表信息为空

4、连接查询思路

1、根据题目要求,确定连接结果
2、根据连接结果,确定连接方式
3、根据语法,写出语句
4、确定查询字段
5、确定访问的表
6、连接条件

三、子查询

1、带ANY、SOME关键字的子查询

①定义:只要满足内层子查询中的任何一个比较条件,就返回一个结果作为外层查询的条件
②语法:select 字段名 from 表名 where 字段名 关系运算符 any/some(select 字段 from 表名)
关系运算符:>,<=,<,>=,=
条件:select 字段 from 表名

2、带ALL关键字的子查询

①定义:只要满足内层子查询中的所有比较条件,才返回一个结果作为外层查询的条件
②语法:select 字段名 from 表名 where 字段名 关系运算符 all(select 字段 from 表名)
关系运算符:>,<=,<,>=,=
条件:select 字段 from 表名

3、带EXISTS关键字的子查询---------判断某个字段是否存在

①定义:判断条件是否满足,满足返回true,外层开始查询,不满足返回false,外层不查询。
②语法:select 字段名 from 表名 where exist(条件)
关系运算符:>,<=,<,>=,=
条件:select 字段 from 表名 where 条件
  ③注意:no exists判断条件是否满足,不满足返回true,外层开始查询,满足返回false,外层不查询。

4、带IN关键字的子查询

①定义:内层查询语句仅仅返回一个数据列,这个数据列的里的值,将提供给外层查询语句查询比较
②语法:elect 字段名 from 表名 where 字段名 in(select 字段名 from 表名 where 条件)
5、带比较运算符关键字的子查询
  关键字:<,>,>=,<=,!=(不等于),<>(不等于)

四、合并查询结果

①语法:select 字段名 from 表名 union【all】select 字段名from 表名;
②注意:
  1、两个表对应的列数和数据数量必须相同
  2、各个select之间用union或union all关键字分开
  3、union执行时删除重复的行,结果唯一
  4、union all执行时包含重复的行

五、为表和字段取别名

1、为表取别名:表名 as 表别名
2、为字段取别名:列名 as 列别名
注意,取别名时,别名不能与原有的数据的表名和列名有冲突

六、使用正则表达式查询

1、语法:select 字段名 from 表名 where 字段名 regexp ‘正则表达式’;
2、常用的正则表达式字符匹配列表
符号 说明 例子 匹配值示例


符号


说明


例子


匹配值示例


^


匹配文本开始字符


‘ ^ b’匹配以字母b开头的字符串


book,big


$


匹配文本结束字符


‘st$’匹配以st结尾的字符串


test,resist


.


匹配任何单个字符


‘b.t’匹配任何b和t之间有一个字符


bit,bat,but


*


匹配零个或多个在它前面的字符


‘f*n’匹配字符n前面有任意个字符f


fn,fan,abcn


+


匹配一次或多次在它前面的字符


‘ba+’匹配以b开头后面紧跟至少有一个a


ba,bay,bare


<字符串>


匹配包含指定的字符串的文本


‘fa’指定文本中包含fa的字符


fan,afa,faad


[字符集合]


匹配字符集合中的任何一个字符


‘[xz]’匹配x或z


dizzy,xebra,


[ ^ ]


匹配不在括号中的任何字符


‘[ ^ abc]’匹配任何不包含a,b,c的字符串


desk,fox,f8ke


字符串{n,}


匹配前面的字符串至少n次


b{2}匹配至少2个的b


bbb,bbbb,bb


字符串{n,m}


匹配前面的字符串至少n次,至多m次。


b{2,4}匹配至少2个,至多4个的b


bbbb,bbb,bb

注意:
1)字符串{n,m},如果n为0,此参数为可选参数
2)匹配多个指定字
3)符串,字符串之间用“|”分开

原文地址:https://www.cnblogs.com/hahayixiao/p/10252236.html

时间: 2024-11-07 14:27:11

MySQL:数据查询的相关文章

Windows中使用MySQL 数据查询(三)

一.排序 select * from employees order by name; 字符型默认字符顺序(也就是说z永远比a大),不管大小写:如果想按编码值排序(也就是说小写永远大于大写),则使用 select * from employees order by binary name; 二.取前n条记录(n在本例中为3) select * from employees order by id limit 3; 三.日期时间函数 1.获取当前日期 select curdate(); 2.取年

nodejs mysql 数据查询例子

1.安装nodejs 2.安装mysql  npm包 地址:https://github.com/felixge/node-mysql npm install mysql 3.相应API查看及调用: var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'me', password : 'secret' }); connection.connect();

MySQL数据查询入门

数据查询就是对于数据表中现有的数据进行逐行筛选的工作.满足查询条件的数据被提取出来,形成记录集.类似表的结构.在记录集上可以再次查询. SELECT命令是使用频率最高的SQL语句.SELECT语句中含有大量子句,用来完成不同的查询功能. SELECT * from 表名字; 全表查询. *代表所有字段 //一般不用通配符  * SELECT  字段1,字段2.......  from 表名字;  //选择字段查询 别名 SELECT  字段1 as 别名1,字段2 as 别名2.......  

mysql数据查询基础

数据查询 select * from 表名  //*号查看表中所有数据 select 字段 from 表名    //查看指定的字段 排序 使用order by 字句查询,比如对学生年龄进行排序,年龄用(age)表示: select age from 表名 order by age asc              //asc表示升序排列 select age from 表名 order by age desc            //desc表示降序排列 原文地址:https://www.c

Mysql数据查询练习题一

设计一个系统,保存乒乓球联赛的比赛信息! 要求:在mysql命令行输出如下信息: 1. 创建一个数据库(本例以ginvip数据库为例) create database ginvip; 2.  创建队员信息表 create table player ( id int unsigned primary key auto_increment, player_name varchar(20) default '', gender enum('male','female','secret') ); 在pl

Mysql 数据查询语句中between and 是包含边界值的

MySQL的sql语句中可以使用between来限定一个数据的范围,例如: select * from user where userId between 5 and 7; 查询userId为5.6,7的user,userId范围是包含边界值的,也等同如下查询: select * from user where userId >= 5 and userId <= 7; 很多地方都提到between是给定的范围是大于等第一值,小于第二个值,其实这是不对的.此前我一直也是这么认为,通过实验,结论是

MySQL数据查询

要点概论 1. SELECT语句的语法 2. 简单查询 3. 连接查询 4.联合查询 5. 子查询 6. 正则表达式查询 7. 通过正则表达式查询数据 1. SELECT 语句的语法 http://www.cnblogs.com/HZY258/p/8496391.html 2. 简单查询 2.1 获取所有列 SELECT * FROM table_name; 如果数据表中的列较少,也可以通过列出所有列名的方式获取数据. 2.2 获取指定列 SELECT 列名列表 FROM table_name;

20180813 mysql 数据查询

数据查询语言DQL select [all | distinct] 字段或表达式列表 [from子句] [where子句] [group by子句] [having子句] [order by子句] [limit子句]: where中可用的运算符: 算术运算符: +  -  *  /   % 比较运算符: >   >=   <    <=   =(等于)   <>(不等于) ==(等于,mysql扩展),!=(不等于,mysql扩展) 逻辑运算符: and(与)  or(

Mysql——数据查询

关键字: 1.简单查询select,from 2.条件查询where,limit 3.排序查询order by desc | asc 4.分组查询group by, having 5.嵌套查询select from (select ...) 6.多表查询inner join, outer join,... --------------- --------------- --------- 1.简单查询 起别名:列别名,表别名 select first_name as name ,salary f

python 编写 SQLSERVER,ORACLE,MYSQL 数据查询及插入数据

SQLSERVER方法: 插入数据代码演示(上下文管理器方法): import pymssql,uuidfrom class_area.class_ReadConf import ReadDate #导入读取配置文件模块方法sql_data=ReadDate('sqlserver.conf','DATABASE','config').readdata() read_data=ReadDate('area.conf','AREAS','config').readdata()area_read_2=