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 是不区分大小写 ...
随机推荐
- Linux入门-程序开发
Linux程序开发 linux程序总体上来说是分两部分的: 1. 底层驱动程序开发: 2.应用层应用程序开发: 驱动程序 一般情况下驱动是跟内核与硬件有关系的,编程语言是C语言,需要懂一些硬件的知识, ...
- 铁大树洞APP视频讲解和原型演示
首先放上我们团队视频讲解演示的视频:https://v.youku.com/v_show/id_XNDYyMzA3MTgzNg==.html 团队名称:超能陆战队 团队成员:刘梦鑫(队长) 段行行 徐 ...
- Python利用Twilio(国际)以及腾讯云服务做一些事情
短信服务验证服务已经不是什么新鲜事了,但是免费的手机短信服务却不多见,本次利用Python3.0基于Twilio和腾讯云服务分别来体验一下国际短信和国内短信接口. 首先,注册Twilio: www.t ...
- 有用的20个Python代码段
Python是一种非BS编程语言.设计简单和易读性是它广受欢迎的两大原因.正如Python的宗旨:美丽胜于丑陋,显式胜于隐式. 记住一些帮助提高编码设计的常用小诀窍是有用的.在必要时刻,这些小诀窍能够 ...
- Springboot Xss注入过滤
1.编写 XssHttpServletRequestWrapper import javax.servlet.http.HttpServletRequest; import javax.servle ...
- ~/.ssh/目录找不到解决方法
执行 cd ~/.ssh发现.ssh目录找不到 原因是因为没有用root用户ssh登录过,执行一下ssh操作就会自动生成了
- jQuery 基本用法
1)页面加载完成后开始运行do stuff when DOM is ready 中的语句! $(document).ready(function() { // do stuff when DOM is ...
- C#LeetCode刷题之#860-柠檬水找零(Lemonade Change)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4036 访问. 在柠檬水摊上,每一杯柠檬水的售价为 5 美元. 顾 ...
- NeuralCoref: python的共指消解工具教程
转载地址 https://blog.csdn.net/blmoistawinde/article/details/81782971 共指消解 首先简要地说说共指消解是什么,有什么用处.假设机器正在阅读 ...
- guice的能力简述
guice这个google出的bean容器框架,ES有用到他. 能干什么 是一个bean容器 能AOP 能力细分与使用方式 以module创建injector.可以看成是一个容器.Module需要自定 ...