MySQL 数据库 查 续
MySQL 增删查改 必知必会
4.1.13 使用 like 关键字进行模糊查询
-- 说明:模糊查询,使用查询关键字like,like意思是类似于,像...的意思
-- 模糊查询,支持两种字符匹配符号:
-- 下划线_:下划线可以代替单个字符
-- 百分号%:可以代替任意个任意字符(0个、1个或者多个字符)
-- 举例:查询员工表中员工编号第二位为2的员工的编号、姓名
SELECT employee_id,first_name,last_name
FROM hrdb.`employees`
WHERE employee_id LIKE "_2%";
4.1.14 查询关键字 distinct 的用法
-- 说明:distinct意思是有区别的,这里用于在查询时过滤掉重复数据
-- 举例:查询员工表中有哪些职位分类,要求查询结果不显示重复数据
SELECT DISTINCT job_id FROM hrdb.`employees`;
-- 举例:查询员工表中不同职位的个数
SELECT COUNT(DISTINCT job_id) FROM hrdb.`employees`;
-- distinct 和count()函数配合使用
4.1.15 多字段排序
-- 多字段排序,就是排序时,可以同时使用多个字段对查询结果数据先后进行排序,“排序字段”之间使用逗号隔开
语法:
ORDER BY 字段1 [[DESC]|[ASC]] ,字段2 [[DESC]|[ASC]]
4.1.16 查询的优先级
优先级顺序:
高:()>NOT>AND>OR 低
-- 举例:查询工资低于8000或者高于12000,员工编号大于120的人员的工资、部门编号、员工编号
SELECT salary,department_id,employee_id
FROM hrdb.`employees`
WHERE (salary <8000 OR salary>12000) AND employee_id>120;
4.2 查询多个表中的数据
4.2.1 跨表查询步骤
步骤一:分析需要查询的数据和给出的条件相关数据分布在哪些表中
步骤二:分析需要查询的数据所在表和所给条件相关数据所在表之间有哪些联系(找两个表的相同字段,存在,即表示两个表有直接关系)
直接关系:两个表之间有数据引用(相同字段)
间接关系:两个表之间通过其他表有数据引用关系(两两之间有共同字段)
步骤三:结合其他所给条件,写查询需要的 SQL 语句
-- 说明:在 sql 语句中,表的别名可以代替对应表,字段的别名可以代替对应字段,
-- 函数的别名可以代替对应函数
-- 别名作用:可以减少 sql 语句编写的工作量,标识数据来源
-- 举例:查看员工表中,员工编号为 100 的员工所在的部门的部门名称
SELECT e.employee_id,d.department_name,d.department_id
FROM hrdb.`employees` AS e,departments AS d
WHERE e.`department_id`=d.`department_id`
AND employee_id=100;
4.2.2 子查询(嵌套查询)
子查询是一个嵌套在另一个查询【主查询】内部中的查询,子查询可以达到的查询目的,使用其他多表连接查询同样可以实现,但子查询更容易阅读和编写;
4.2.2.1 子查询出现在 from 子句中
-- 说明:把内层的子查询查询结果当成临时表,供外层 sql 语句再次查询
-- 语法:
Select 查询列表1
from(
select查询列表2
from 库名.表名
where 条件表达式
);
-- 外部查询的查询列表需要和子查询的查询列表相同或者为其子集
-- 举例:查询hrdb数据库employees表工资大于7000的名字包括字母c的员工的first_name,salary
-- 方法一
SELECT first_name,salary
FROM hrdb.`employees`
WHERE salary>7000 AND first_name LIKE "%c%";
-- 方法二、子查询写法
SELECT x.first_name,x.salary
FROM (SELECT first_name,salary FROM hrdb.`employees` WHERE salary>7000) X
WHERE x.first_name LIKE "%c%";
-- 给子查询加一个别名
4.2.2.2 子查询出现在where子句中:
-- 说明:指把内层查询的结果作为外层查询的比较条件.
-- 语法:
SELECT 字段1
FROM 库名.表名
WHERE 字段1 关系运算符
(
SELECT 字段1
FROM 库名.表名
WHERE 字段2 关系运算符 字段值
);
-- 举例:查询员工表中工资比“员工编号为104的员工的工资”低的员工的姓名、员工编号、工资
SELECT first_name,last_name,employee_id,salary
FROM hrdb.`employees`
WHERE salary<
(
SELECT salary
FROM hrdb.`employees`
WHERE employee_id=104
);
4.2.2.3 子查询出现在having子句中
-- 语法
SELECT 查询列表
FROM 库名.表名
GROUP BY 字段1
HAVING 字段1 比较运算符(SELECT 字段1 FROM 库名.表名 WHERE 条件);
-- 举例:查询员工表中"部门编号大于|first_name为Bruce的员工所在部门的部门编号|",的部门的编号
SELECT department_id
FROM hrdb.`employees`
GROUP BY department_id
HAVING department_id>
(
SELECT department_id
FROM hrdb.`employees`
WHERE first_name="Bruce"
);
4.2.2.4 子查询操作符ALL的用法
-- 说明:
ALL操作符有三种用法:
-- <>ALL:等价于 NOT IN
-- >ALL :比子查询中最大的值还要大
-- <ALL :比子查询中最小的值还要小
-- 特别说明:“= All”不存在
语法:
SELECT 字段1
FROM 库名.表名
WHERE 字段1 关系运算符 ALL
(
SELECT 字段1
FROM 库名.表名
WHERE 字段2 关
系运算符 字段值
);
-- 举例:查询工资与"job_id为IT_PROG的职位中所有人工资"都不同的人员姓名、工资
方法一、
SELECT first_name,last_name,salary
FROM hrdb.`employees`
WHERE salary NOT IN(SELECT salary FROM hrdb.`employees` WHERE job_id="IT_PROG");
方法二、
SELECT first_name,last_name,salary
FROM hrdb.`employees`
WHERE salary <>ALL(SELECT salary FROM hrdb.`employees` WHERE job_id="IT_PROG");
4.2.2.5 子查询操作符any的用法
-- = ANY:与子查询中的数据任何一个相等
-- >ANY : 比子查询中的数据最低的高
-- <ANY : 比子查询中的数据最高的低
-- 举例:查询工资与job_id为IT_PROG的职位中所有人工资相等的人员姓名、工资(=ANY 与任何一个相等)
SELECT first_name,last_name,salary
FROM hrdb.`employees`
WHERE salary=ANY(
SELECT salary
FROM hrdb.`employees`
WHEREjob_id="IT_PROG"
);
-- 举例:查询工资比job_id为IT_PROG的职位中最低工资高的人员姓名、工资(>ANY 比最低的高)
SELECT first_name,last_name,salary
FROM hrdb.`employees`
WHERE salary>ANY(
SELECT salary
FROM hrdb.`employees`
WHEREjob_id="IT_PROG"
);
4.2.3内连接&外连接查询
4.2.3.1内连接【等值连接】查询
-- 说明:
在进行跨表内连接查询数据时,查询结果只返回符合查询条件的数据;
跨表内连接查询的结果和使用where的多表查询结果相同。
-- 语法:
SELECT 别名1.字段名1,别名2.字段名2
FROM 库名.表名1 [AS] 别名1
INNER JOIN 库名.表名2 [AS] 别名2
ON 别名1.字段名3=别名2.字段名3;
-- 举例:查询员工表中,员工编号为100的员工所在部门的部门名称,查询结果显示员工编号、部门名称
-- 方法一、
SELECT e.employee_id,d.department_name
FROM hrdb.`employees` e,hrdb.`departments` d
WHERE e.department_id=d.department_id
AND e.employee_id=100;
-- 方法二、内连接写法
SELECT e.employee_id,d.department_name
FROM hrdb.`employees` e
INNER JOIN hrdb.`departments` d
ON e.department_id=d.department_id
AND e.employee_id=100;
-- 举例:查询在城市Seattle中工作的人员有哪些(跨三个表查询数据)
SELECT l.city,e.employee_id
FROM hrdb.`locations` l
INNER JOIN hrdb.`departments` d
ON l.location_id=d.location_id
INNER JOIN hrdb.`employees` e
ON d.department_id=e.department_id
AND l.city="Seattle";
4.2.3.2外连接((左外连接、右外连接、全连接)查询)
4.2.3.2.1左外连接(简称左连接)
-- 左表:进行左连接查询时,在你写的sql语句中首先(第一个)出现的表,称为左表;
-- 说明:使用多表查询时,如果某个表中的数据需要全部显示,
-- 查询时,如果使用左连接进行查询,需要将这个表作为左表,
-- 查询完成后,左表的数据都全部显示在结果中,
-- 右表【除第一个表以外的表都称为右表】中符合查询条件的数据显示在查询结果中,
-- 右表中不符合查询条件的数据,也显示在结果中,不符合条件的数据以null填充。
-- 语法:
SELECT 别名1.字段名1,别名2.字段名2
FROM 库名.表名1 [AS] 别名1
LEFT JOIN 库名.表名2 [AS] 别名2
ON 别名1.字段名3=别名2.字段名3 ;
--举例:查询部门表中哪些部门没有员工、哪些部门有员工,查询结果显示部门名称、员工编号
SELECT department_name,employee_id
FROM hrdb.`departments` d
LEFT JOIN hrdb.`employees` e
ON d.department_id=e.department_id;
4.2.3.2.2右外连接(简称右连接)查询
-- 右表:右连接查询中,进行多表连接查询时,最后出现的表,称为右表;
-- 说明:进行多表查询时,如果某个表中的数据需要全部显示,
-- 如果使用右连接查询时,需要将这个表作为右表,查询后,右表中的数据全部显示,左表【除右表以外的表都称为左表】中符合条件的数据显示在查询结果中,左表中不符合条件的数据,也显示在结果中,但相关数据以null填充。
语法:
SELECT 别名1.字段名1,别名2.字段名2
FROM 库名.表名1 [AS] 别名1
RIGHT JOIN 库名.表名2 [AS] 别名2
ON 别名1.字段名3=别名2.字段名3; -- 连接条件
-- 举例:查询部门表中哪些部门没有员工,哪些部门有员工,查询结果显示部门名称、员工编号
-- 右连接写法
SELECT d.department_name,e.employee_id
FROM hrdb.`employees` e
RIGHT JOIN hrdb.`departments` d
ON e.department_id=d.department_id;
4.2.3.2.1联合查询关键字UNION的用法
举例:查询员工表中员工编号分别为110和115的人员的工资、入职日期
-- 方法一
SELECT salary,hire_date
FROM hrdb.`employees`
WHERE employee_id=110
OR employee_id=115;
-- 方法二 联合查询写法
SELECT salary,hire_date
FROM hrdb.`employees`
WHERE employee_id=110
UNION
SELECT salary,hire_date
FROM hrdb.`employees`
WHERE employee_id=115;
5、用户及权限管理
5.1 mysql用户分类角度1(权限不同):
(1) 管理员用户:root,具有最高权限,具有创建用户的权限,可以为其他用户授权
(2) 普通用户:普通用户由root用户创建,权限由root用户分配
5.2 mysql用户分类角度2(访问主机不同)
(1)本地用户
-- 只能在安装mysql的机器上访问mysql数据库的用户,在创建用户时,使用的IP地址为localhost
(2)远程访问用户
-- 在安装mysql的机器以外的机器上访问mysql数据库的相关用户
2.1 只能在指定IP对应的机器上访问远程mysql数据库的用户,创建用户时,只能使用指定的具体IP地址:如172.30.70.149所在的机器访问远程数据库
2.2 在除安装mysql数据库对应机器以外的任何一台机器上可以访问远程mysql数据库的用户 ,在创建用户时,使用的IP地址为百分号%(常用)
5.3 MySQL添加新用户
-- 在mysql中,添加一个可用的新用户,共分为三步:
步骤一:添加用户
步骤二:为用户授权
步骤三:使授权生效
5.3.1、用户创建
语法:
INSERT INTO mysql.`user`(HOST,USER,PASSWORD) VALUES("IP地址","用户名",PASSWORD("密码")); -- 创建用户
-- PASSWORD() 加密函数
举例:创建远程访问用户test1,
为该用户在数据库hrdb中的所有表上授予select、insert权限,
使该用户在远程任何一台主机上可以访问数据库,该用户的密码为123456
-- 步骤一、创建用户
INSERT INTO mysql.user(HOST,USER,PASSWORD)
VALUES("%","test1",PASSWORD("123456"));
-- 步骤二、 为新用户授权
GRANT SELECT,INSERT ON hrdb.* TO "test1"@"%" IDENTIFIED BY "123456";
-- 步骤三、使授权生效
FLUSH PRIVILEGES; -- 刷新授权表,效果相当于重启mysql服务
SHOW GRANTS;
MySQL 数据库 查 续的更多相关文章
- MySQL 增删查改 必知必会
MySQL 数据库中的基础操作 3.表的修改 对表的表名.字段.字段类型.字段长度.约束等进行修改. 3.1 表的名称修改 -- 语法: ALTER TABLE 库名.表名 RENAME TO 新表名 ...
- 10月28日下午MySQL数据库的增加、删除、查询(匹配数据库登录和可以增、删、查的显示数据库内容的页面))
一.匹配数据库登录 步骤: 1.做一个普通的登录界面,注意提交方式为post. <!--登录界面--> <form action="chuli.php" meth ...
- java jdbc 连接mysql数据库 实现增删改查
好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打 ...
- MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Windows下安装MySQLdb, Python操作MySQL数据库的增删改查
这里的前提是windows上已经安装了MySQL数据库,且配置完成,能正常建表能操作. 在此基础上仅仅需安装MySQL-python-1.2.4b4.win32-py2.7.exe就ok了.仅仅有1M ...
- jsp-2 简单的servlet连接mysql数据库 增删改查
连接mysql数据库的操作 有增删改查 用的包有 commons-lang3-3.5 mysql-connector-java-5.1.40-bin 但是实际上也就是 数据查询和数据处理两种 所以对数 ...
- 安卓版php服务器的mysql数据库增删改查简单案例
界面: index.php文件: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h ...
- php 连接mysql数据库以及增删改查
php 连接数据库 一般是用面向对象的方法,需要先创建一个对象,即造一个连接对象,然后再写sql语句,(增改查删),最后执行sql语句 其中在创建连接对象时 我们用到的是MySQLI 是不区分大小写 ...
随机推荐
- 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(13.A)- LPSPI NOR启动时间(RT1170)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT1170 1bit SPI NOR恢复启动时间. 本篇是i.MXRT1170启动时间评测第三弹了,前两篇分别给大家评 ...
- Axios源码分析
Axios是一个基于promise的HTTP库,可以用在浏览器和node.js中. 文档地址:https://github.com/axios/axios axios理解和使用 1.请求配置 { // ...
- 谈谈Nginx和php之间是交互与通信的方式
Nginx是俄国人最早开发的Webserver,现在已经风靡全球,相信大家并不陌生.PHP也通过二十多年的发展来到了7系列版本,更加关注性能.这对搭档在最近这些年,叱咤风云,基本上LNMP成了当下的标 ...
- jenkins集成spring boot持续化构建代码
我个人使用的是阿里云的云服务器,项目采用的是spring boot为框架,现在要做的功能就是将本地开发的代码提交到github中,通过jenkins自动化集成部署到云服务器.接下来开始步骤. 1 首先 ...
- Bytom侧链Vapor源码浅析-节点出块过程
Bytom侧链Vapor源码浅析-节点出块过程 在这篇文章中,作者将从Vapor节点的创建开始,进而拓展讲解Vapor节点出块过程中所涉及的源码. 做为Vapor源码解析系列的第一篇,本文首先对Vap ...
- CUDA线程、线程块、线程束、流多处理器、流处理器、网格概念的深入理解
一.与CUDA相关的几个概念:thread,block,grid,warp,sp,sm. sp: 最基本的处理单元,streaming processor 最后具体的指令和任务都是在sp上处理的.G ...
- 【Docker】 Error running deviceCreate (CreateSnapDeviceRaw)
问题详细信息: [root@passport docker]# docker-compose -f docker-compose.yml up -ddocker_db_1_1651de706222 i ...
- 【Linux】zookeeper-3.5.6启动失败8080端口被占用
通过查看zookeeper的官方文档 1. 可以禁用adminServer 2.可以删除jetty服务
- Homekit_二路继电器
介绍一款二路继电器,使用Homekit进行控制,有兴趣的可以去以下链接看看: https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-11265006 ...
- vue项目发布后带路径打开页面报404问题
环境: 后端,python+uwsgi启动 前端:vue 用nginx运行,指定静态目录 问题 :发布后带路径打开页面报404问题,带路径打开即不是打开的主页 解决方案: https://route ...