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 数据库 查 续的更多相关文章

  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. SqlServer 多表连接、聚合函数、模糊查询、分组查询应用总结(回归基础)

    --exists 结合 if else 以及 where 条件来使用判断是否有数据满足条件 select * from Class where Name like '%[1-3]班' if (not ...

  2. day25:魔术方法

    目录 1.__del__(析构方法) 2.魔术方法:__str__ 3.魔术方法:__repr__ 4.魔术方法:__call__ 5.魔术方法:__bool__ 6.魔术方法:__add__& ...

  3. RabbitMQ 基础概念进阶

    上一篇 RabbitMQ 入门之基础概念 介绍了 RabbitMQ 的一些基础概念,本文再来介绍其中的一些细节和其它的进阶的概念. 一.消息生产者发送的消息不可达时如何处理 RabbitMQ 提供了消 ...

  4. 2020-05-18:MYSQL为什么用B+树做索引结构?平时过程中怎么加的索引?

    福哥答案2020-05-18:此答案来自群员:因为4.0成型那个年代,B树体系大量用于文件存储系统,甚至当年的Longhorn的winFS都是基于b树做索引,开源而且好用的也就这么个体系了.B+树的磁 ...

  5. HTTP PUT/POST/PATCH的区别

    幂等 idempotent 幂等操作的特定就是其任意多次执行所产生的影响与一次执行的影响相同 POST POST 用来创建一个新的数据 POST 不是幂等的, 意味着多次操作的结果是不同的, 多次操作 ...

  6. 《Java从入门到失业》第一章:计算机基础知识(三):程序语言简介

    1.3程序语言简介 我们经常会听到一些名词:低级语言.高级语言.编译型.解释型.面向过程.面向对象等.这些到底是啥意思呢?在正式进入Java世界前,笔者也尝试简单的聊一聊这块东西. 1.3.1低级语言 ...

  7. android.content.ActivityNotFoundException: No Activity found to handle Intent { (has extras) }

    报错: 初始代码: @OnClick(R.id.include_top_iv_more) public void onViewClicked() { Intent intent_chat_set = ...

  8. eclipse git提交项目以及down项目大致步骤

    down git项目步骤: 复制了url之后,import projects项目选中from git ,会出现如下截图,信息会自动填充 填好信息一直Next即可 完成之后,打开“Git Reposit ...

  9. kvm-virtualization – 删除“孤儿”libvirt快照

    原文链接:https://codeday.me/bug/20181110/371346.html 创建快照: virsh snapshot-create-as --domain prod snap - ...

  10. PL/SQL语言基础

    PL/SQL语言基础 进行PL/SQL编程前,要打开输出set serveroutput on 1.创建一个匿名PL/SQL块,将下列字符输出到屏幕:"My PL/SQL Block Wor ...