MySQL 增删查改 必知必会

4.1.13 使用 like 关键字进行模糊查询

-- 说明:模糊查询,使用查询关键字like,like意思是类似于,像...的意思

-- 模糊查询,支持两种字符匹配符号:

-- 下划线_:下划线可以代替单个字符

-- 百分号%:可以代替任意个任意字符(0个、1个或者多个字符)

  1. -- 举例:查询员工表中员工编号第二位为2的员工的编号、姓名
  2. SELECT employee_id,first_name,last_name
  3. FROM hrdb.`employees`
  4. WHERE employee_id LIKE "_2%";

4.1.14 查询关键字 distinct 的用法

-- 说明:distinct意思是有区别的,这里用于在查询时过滤掉重复数据

  1. -- 举例:查询员工表中有哪些职位分类,要求查询结果不显示重复数据
    SELECT DISTINCT job_id FROM hrdb.`employees`;
  1. -- 举例:查询员工表中不同职位的个数
    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 低

  1. -- 举例:查询工资低于8000或者高于12000,员工编号大于120的人员的工资、部门编号、员工编号
  2. SELECT salary,department_id,employee_id
  3. FROM hrdb.`employees`
  4. WHERE (salary <8000 OR salary>12000) AND employee_id>120;

4.2 查询多个表中的数据

4.2.1 跨表查询步骤

步骤一:分析需要查询的数据和给出的条件相关数据分布在哪些表中

步骤二:分析需要查询的数据所在表和所给条件相关数据所在表之间有哪些联系(找两个表的相同字段,存在,即表示两个表有直接关系)

直接关系:两个表之间有数据引用(相同字段)

间接关系:两个表之间通过其他表有数据引用关系(两两之间有共同字段)

步骤三:结合其他所给条件,写查询需要的 SQL 语句

-- 说明:在 sql 语句中,表的别名可以代替对应表,字段的别名可以代替对应字段,

-- 函数的别名可以代替对应函数

-- 别名作用:可以减少 sql 语句编写的工作量,标识数据来源

  1. -- 举例:查看员工表中,员工编号为 100 的员工所在的部门的部门名称
  2. SELECT e.employee_id,d.department_name,d.department_id
  3. FROM hrdb.`employees` AS e,departments AS d
  4. WHERE e.`department_id`=d.`department_id`
  5. AND employee_id=100;

4.2.2 子查询(嵌套查询)

子查询是一个嵌套在另一个查询【主查询】内部中的查询,子查询可以达到的查询目的,使用其他多表连接查询同样可以实现,但子查询更容易阅读和编写;

4.2.2.1 子查询出现在 from 子句中

-- 说明:把内层的子查询查询结果当成临时表,供外层 sql 语句再次查询

-- 语法:

Select 查询列表1

from(

select查询列表2

from 库名.表名

where 条件表达式

);

-- 外部查询的查询列表需要和子查询的查询列表相同或者为其子集

  1. -- 举例:查询hrdb数据库employees表工资大于7000的名字包括字母c的员工的first_name,salary
  2. -- 方法一
  3.   SELECT first_name,salary
  4.   FROM hrdb.`employees`
  5.   WHERE salary>7000 AND first_name LIKE "%c%";
  6. -- 方法二、子查询写法
  7.   SELECT x.first_name,x.salary
  8.   FROM (SELECT first_name,salary FROM hrdb.`employees` WHERE salary>7000) X
  9.   WHERE x.first_name LIKE "%c%";
  10. -- 给子查询加一个别名

4.2.2.2 子查询出现在where子句中:

-- 说明:指把内层查询的结果作为外层查询的比较条件.

-- 语法:

SELECT 字段1

FROM 库名.表名

WHERE 字段1 关系运算符

(

SELECT 字段1

FROM 库名.表名

WHERE 字段2 关系运算符 字段值

);

  1. -- 举例:查询员工表中工资比“员工编号为104的员工的工资”低的员工的姓名、员工编号、工资
  2. SELECT first_name,last_name,employee_id,salary
  3. FROM hrdb.`employees`
  4. WHERE salary<
  5. (
  6.   SELECT salary
  7.   FROM hrdb.`employees`
  8.   WHERE employee_id=104
  9. );

4.2.2.3 子查询出现在having子句中

-- 语法

SELECT 查询列表

FROM 库名.表名

GROUP BY 字段1

HAVING 字段1 比较运算符(SELECT 字段1 FROM 库名.表名 WHERE 条件);

  1. -- 举例:查询员工表中"部门编号大于|first_name为Bruce的员工所在部门的部门编号|",的部门的编号
  2. SELECT department_id
  3. FROM hrdb.`employees`
  4. GROUP BY department_id
  5. HAVING department_id>
  6. (
  7.   SELECT department_id
  8.   FROM hrdb.`employees`
  9.   WHERE first_name="Bruce"
  10. );

4.2.2.4 子查询操作符ALL的用法

-- 说明:

ALL操作符有三种用法:

-- <>ALL:等价于 NOT IN

-- >ALL :比子查询中最大的值还要大

-- <ALL :比子查询中最小的值还要小

-- 特别说明:“= All”不存在

语法:

SELECT 字段1

FROM 库名.表名

WHERE 字段1 关系运算符 ALL

(

SELECT 字段1

FROM 库名.表名

WHERE 字段2 关

系运算符 字段值

);

  1. -- 举例:查询工资与"job_id为IT_PROG的职位中所有人工资"都不同的人员姓名、工资
  2. 方法一、
  3.   SELECT first_name,last_name,salary
  4.   FROM hrdb.`employees`
  5.   WHERE salary NOT IN(SELECT salary FROM hrdb.`employees` WHERE job_id="IT_PROG");
  6. 方法二、
  7.   SELECT first_name,last_name,salary
  8.   FROM hrdb.`employees`
  9.   WHERE salary <>ALL(SELECT salary FROM hrdb.`employees` WHERE job_id="IT_PROG");

4.2.2.5 子查询操作符any的用法

-- = ANY:与子查询中的数据任何一个相等

-- >ANY : 比子查询中的数据最低的高

-- <ANY : 比子查询中的数据最高的低

  1. -- 举例:查询工资与job_idIT_PROG的职位中所有人工资相等的人员姓名、工资(=ANY 与任何一个相等)
  2. SELECT first_name,last_name,salary
  3. FROM hrdb.`employees`
  4. WHERE salary=ANY(
  5. SELECT salary
  6. FROM hrdb.`employees`
  7. WHEREjob_id="IT_PROG"
  8. );
  1. -- 举例:查询工资比job_idIT_PROG的职位中最低工资高的人员姓名、工资(>ANY 比最低的高)
  2. SELECT first_name,last_name,salary
  3. FROM hrdb.`employees`
  4. WHERE salary>ANY(
  5. SELECT salary
  6. FROM hrdb.`employees`
  7. WHEREjob_id="IT_PROG"
  8. );

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;

  1. -- 举例:查询员工表中,员工编号为100的员工所在部门的部门名称,查询结果显示员工编号、部门名称
  2. -- 方法一、
  3. SELECT e.employee_id,d.department_name
  4. FROM hrdb.`employees` e,hrdb.`departments` d
  5. WHERE e.department_id=d.department_id
  6. AND e.employee_id=100;
  7. -- 方法二、内连接写法
  8. SELECT e.employee_id,d.department_name
  9. FROM hrdb.`employees` e
  10. INNER JOIN hrdb.`departments` d
  11. ON e.department_id=d.department_id
  12. AND e.employee_id=100;
  1. -- 举例:查询在城市Seattle中工作的人员有哪些(跨三个表查询数据)
  2. SELECT l.city,e.employee_id
  3. FROM hrdb.`locations` l
  4. INNER JOIN hrdb.`departments` d
  5. ON l.location_id=d.location_id
  6. INNER JOIN hrdb.`employees` e
  7. ON d.department_id=e.department_id
  8. 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 ;

  1. --举例:查询部门表中哪些部门没有员工、哪些部门有员工,查询结果显示部门名称、员工编号
  2. SELECT department_name,employee_id
  3. FROM hrdb.`departments` d
  4. LEFT JOIN hrdb.`employees` e
  5. 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; -- 连接条件

  1. -- 举例:查询部门表中哪些部门没有员工,哪些部门有员工,查询结果显示部门名称、员工编号
  2. -- 右连接写法
  3. SELECT d.department_name,e.employee_id
  4. FROM hrdb.`employees` e
  5. RIGHT JOIN hrdb.`departments` d
  6. ON e.department_id=d.department_id;

4.2.3.2.1联合查询关键字UNION的用法

  1. 举例:查询员工表中员工编号分别为110115的人员的工资、入职日期
  2. -- 方法一
  3. SELECT salary,hire_date
  4. FROM hrdb.`employees`
  5. WHERE employee_id=110
  6. OR employee_id=115;
  7. -- 方法二 联合查询写法
  8. SELECT salary,hire_date
  9. FROM hrdb.`employees`
  10. WHERE employee_id=110
  11. UNION
  12. SELECT salary,hire_date
  13. FROM hrdb.`employees`
  14. 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 数据库 查 续的更多相关文章

  1. MySQL 增删查改 必知必会

    MySQL 数据库中的基础操作 3.表的修改 对表的表名.字段.字段类型.字段长度.约束等进行修改. 3.1 表的名称修改 -- 语法: ALTER TABLE 库名.表名 RENAME TO 新表名 ...

  2. 10月28日下午MySQL数据库的增加、删除、查询(匹配数据库登录和可以增、删、查的显示数据库内容的页面))

    一.匹配数据库登录 步骤: 1.做一个普通的登录界面,注意提交方式为post. <!--登录界面--> <form action="chuli.php" meth ...

  3. java jdbc 连接mysql数据库 实现增删改查

    好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打 ...

  4. MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  5. MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  6. Windows下安装MySQLdb, Python操作MySQL数据库的增删改查

    这里的前提是windows上已经安装了MySQL数据库,且配置完成,能正常建表能操作. 在此基础上仅仅需安装MySQL-python-1.2.4b4.win32-py2.7.exe就ok了.仅仅有1M ...

  7. jsp-2 简单的servlet连接mysql数据库 增删改查

    连接mysql数据库的操作 有增删改查 用的包有 commons-lang3-3.5 mysql-connector-java-5.1.40-bin 但是实际上也就是 数据查询和数据处理两种 所以对数 ...

  8. 安卓版php服务器的mysql数据库增删改查简单案例

    界面: index.php文件: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h ...

  9. php 连接mysql数据库以及增删改查

    php 连接数据库 一般是用面向对象的方法,需要先创建一个对象,即造一个连接对象,然后再写sql语句,(增改查删),最后执行sql语句 其中在创建连接对象时 我们用到的是MySQLI  是不区分大小写 ...

随机推荐

  1. Mybatis 的连接池技术

    我们在前面的 WEB 课程中也学习过类似的连接池技术,而在 Mybatis 中也有连接池技术,但是它采用的是自 己的连接池技术.在 Mybatis 的 SqlMapConfig.xml 配置文件中,通 ...

  2. Python接口自动化测试框架: pytest+allure+jsonpath+requests+excel实现的接口自动化测试框架(学习成果)

    废话 最近在自己学习接口自动化测试,这里也算是完成一个小的成果,欢迎大家交流指出不合适的地方,源码在文末 问题 整体代码结构优化未实现,导致最终测试时间变长,其他工具单接口测试只需要39ms,该框架中 ...

  3. C++虚函数相关内容

    样例代码 class Base{public: Base(){}; virtual ~Base(){    //若没有设置为虚函数:如果有这样的指针Base *p=new Derived();声明,则 ...

  4. 畅购商城(八):微服务网关和JWT令牌

    好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航 畅购商城(一):环境搭建 畅购商 ...

  5. 【API进阶之路】无法想象!大龄码农的硬盘里有这么多宝藏

    摘要:通过把所需建立的工具库做成云容器化应用,用CCE引擎,通过API网关调用云容器引擎中的容器应用.不仅顺应了云原生的发展趋势,还能随时弹性扩容,满足公司规模化发展的需求. 公司开完年中会后,大家的 ...

  6. C#LeetCode刷题-图

    图篇 # 题名 刷题 通过率 难度 133 克隆图   18.7% 中等 207 课程表   40.0% 中等 210 课程表 II   40.0% 中等 310 最小高度树   29.5% 中等 3 ...

  7. C#LeetCode刷题之#58-最后一个单词的长度(Length of Last Word)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3927 访问. 给定一个仅包含大小写字母和空格 ' ' 的字符串, ...

  8. Vue Element-UI 中列表单选的实现

    el-table中单选的实现 引用场景: 选择单条数据进行业务操作 实现方式: 给el-table-column设置el-radio Template 代码 <div class="r ...

  9. 虚拟化技术之kvm管理工具virsh常用基础命令(二)

    上一篇博客我们主要聊了下virsh 管理kvm虚拟机的命令相关用法和说明,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13508231.html:今天我们来继 ...

  10. unity探索者之微信分享所有流程,非第三方插件

    版权声明:本文为原创文章,转载请声明http://www.cnblogs.com/unityExplorer/p/7560575.html 很久没有写新博客了,前段时间有些忙,这几天趟了几个微信分享的 ...