MySQL基本操作整理(一)、基础查询与条件查询

本系列文章将重点整理MySQL的基本操作,所有的操作都基于以下的数据库进行:myemployees与girls数据库。数据库 myemployees 包括员工表employees、部门表departments、地理位置表locations、工种表jobs以及工资等级表job_grades。数据库 girls 包括管理员表admin、女神表beauty与男神表boys。

建表的SQL脚本网盘可取:https://pan.baidu.com/s/12Z4iJ1Bc6WyopBawnqt41w 提取码:qijf

数据库相关概念

一、数据库的好处

  1. 可以持久化数据到本地
  2. 结构化查询

二、数据库的常见概念 ★

  1. DB:数据库,存储数据的容器
  2. DBMS:数据库管理系统,又称为数据库软件或数据库产品,用于创建或管理DB
  3. SQL:结构化查询语言,用于和数据库通信的语言,不是某个数据库软件特有的,而是几乎所有的主流数据库软件通用的语言

三、数据库存储数据的特点

  1. 数据存放到表中,然后表再放到库中
  2. 一个库中可以有多张表,每张表具有唯一的表名用来标识自己
  3. 表中有一个或多个列,列又称为“字段”,相当于java中“属性”
  4. 表中的每一行数据,相当于java中“对象”

四、常见的数据库管理系统

  • mysql、oracle、db2、sqlserver

MySQL介绍

一、MySQL的背景

  • 前身属于瑞典的一家公司,MySQL AB
  • 08年被sun公司收购
  • 09年sun被oracle收购

二、MySQL的优点 ★

  1. 开源、免费、成本低
  2. 性能高、移植性也好
  3. 体积小,便于安装

三、MySQL的安装

  • MySQL属于c/s架构的软件,一般来讲安装服务端
  • 分为企业版、社区版,我们安装的都是社区版;共有5.5,5.6,5.7,8.0等版本。

常用命令

1.将MySQL添加到Windows服务,启/停MySQL服务:
net start mysql; (net stop mysql)
2. 登录mysql
mysql -h localhost -P 3306 -u root -p123456

该语句注意事项:

  • 这里的端口号参数-P必须用大写,小写的会报错
  • 用户名-u root这里的空格有没有都是可以的
  • 密码-p123456 这里要么就是不用空格,要么就是-p之后换行,改用隐藏密码的方式,不能在-p和密码之间加空格
  • 本地简单登录:mysql -uroot -p

在这里插入图片描述
3. 在一个数据库中查看另一个数据库中的所有表
show tables from 【数据库名】;
在这里插入图片描述
4. 查看当前的数据库
select databases();
在这里插入图片描述
5. 查看数据库的版本
select version();(登录到mysql服务端)
mysql --version;(没有登录到mysql服务端)
mysql -V;(没有登录到mysql服务端)
在这里插入图片描述在这里插入图片描述
6. 删除某条记录
delete from 【表名】 where 【+条件,如:where id = 1】;

MySQL的语法规范

  1. 不区分大小写,但建议关键字大写,表名、列名小写
  2. 每条命令最好用分号结尾(DOS命令行必须,可视化工具最好加分号)
  3. 每条命令根据需要,可以进行缩进或换行
  4. 注释:单行注释:#注释文字,或者–注释文字
    多行注释和java中相同:/* 注释文字*/

查询

基础查询

MySQL的可视化工具有很多,个人常用的有Navicat和MySQL Workbench,其实还有一个工具SQLyog,该工具对于以上规范的支持比较友好,自动将关键字大写,并且在查询某字段时,可以直接通过“哪里不会点哪里”的方式进行查询,避免了手动输入。如下图,字段的输入,可以直接通过双击字段的方式。
在这里插入图片描述
上图中,字段的着重号为自动添加,也可以去掉,没有影响。

  1. 查询常量(查询常量类似于打印)
    select 【+常量值】,如:
    select 100;
    select ‘Jack’;
  2. 查询表达式
    select 100*3;
    select 100%98;
  3. 查询函数
    select version();
    select database();
  4. 起别名(要查询的字段有重名的情况,可以用别名来区分)
    方式一:使用as
    select last_name as 姓, first_name as 名 from employees;
    方式二:使用空格
    select last_name 姓, first_name 名 from employees;
    方式三:可加双引号或单引号,推荐双引号
    select salary as “out put” from employees;
  5. 去重
    select distinct ‘department_id’ from employees;
  6. 连接符
    select concat (‘a’,‘b’,‘c’) as 结果;
    select concat (last_name, first_name) as 姓名 from employees;
  7. 是否为空
    select ifnull(commission_pct, 0) as 奖金率, commission_pct from employees; #若奖金率为空,则将查询的奖金率置为0

加号“+”的作用

java中的+号
1)运算符:两个操作数都为数值型;
2)连接符:只要一个操作数为字符串。

mysql中的+号
仅仅只有一个功能:运算符
select 100+99; #两个操作数都为数值型,则做加法运算
select ‘123’+90; #其中一方为字符型,试图将字符型数值转换为数值型;如果转换成功,则继续做加法运算
select ‘jack’+12; #如果转换失败,则将字符型数值转换成0
select null+10; #只要其中一方为null,则结果肯定为null

条件查询

语法:
select 查询列表 from 表名 where 筛选条件;
分类:
一、按条件表达式筛选
简单条件运算符:>, < , =, !=, <>, >=, <=
二、按逻辑表达式筛选
逻辑运算符: && || !
and or not (推荐)
三、模糊查询
复杂一点的条件运算符:like, between and, in, is null, is not null

like的通配符:
%,匹配0个或多个字符;
_,匹配单个字符;
\,转义符,或者使用escape关键字
between and:判断某字段的值是否落在某个范围内,包含边界值;两个值不能颠倒
in:判断某字段的值是否属于in列表中的某一项,使用in提高了语句简洁度;in列表的值类型必须是一致或兼容,如‘123’与123;in列表中的值不能使用通配符,因为查询条件相当于“=”,而不是“like”
is null:用于判断某字段值是否为null,我们不能使用“= null”或者“<> null”来进行查询,后者查询不出结果。
<=>:安全等于,既可以用来判断null值,也可以用来判断是否等于普通数值,缺点是:可读性比较差,推荐使用is null。

案例1(逻辑运算符与between and):查询部门编号不是在90到110之间,或者工资高于15000的员工信息

SELECT
	*
FROM 
	employees
WHERE
	NOT (department_id >= 90 AND department_id <= 110)
	OR salary > 15000;
SELECT
	*
FROM 
	employees
WHERE
	NOT (department_id BETWEEN 90 AND 110)
	OR salary > 15000;

案例2(通配符%与_):查询员工中第三个字符为n,第五个字符为l的员工名和工资(别忘了最后用%通配符)

#案例2
SELECT
	last_name,
	salary
FROM
	employees
WHERE
	last_name LIKE '__n_l%';

案例3(转义符\与escape):查询员工名中第二个字符为_的员工名

SELECT
	last_name
FROM
	employees
WHERE
	last_name LIKE '_\_%';#\转义
SELECT
	last_name
FROM
	employees
WHERE
	last_name LIKE '_$_%' ESCAPE '$';#将$作为转义符(推荐)

案例4(in条件运算符):查询员工的工种编号是IT_PROT, AD_VP, AD_PRES中的一种的员工名和工种编号

SELECT 
	last_name,
	job_id
FROM 
	employees
WHERE
	job_id = 'IT_PROT' OR job_id = 'AD_VP' OR job_id = 'AD_PRES';
SELECT 
	last_name,
	job_id
FROM 
	employees
WHERE
	job_id IN ('IT_PROT','AD_VP','AD_PRES');

案例5(is null):查询没有奖金的员工名和奖金率

SELECT
	last_name,
	commission_pct
FROM
	employees
WHERE
	commission_pct IS NULL;

案例6(ifnull):查询员工号为176的员工的姓名和部门和年薪

SELECT
	last_name,
	department_id,
	salary*12*(1+IFNULL(commission_pct,0)) AS 年薪
FROM
	employees;

经典面试题
试问一下语句的结果是否一样,并说明原因?

SELECT * FROM employees;
SELECT * FROM employees WHERE commission_pct LIKE '%%' AND last_name LIKE '%%';

答:不一样,因为第二条语句判断的字段有null值,两者求得的交集;
若改为,以下语句则结果一样,因为求的是并集,有不是null的字段。

SELECT * FROM employees WHERE commission_pct LIKE '%%' OR last_name LIKE '%%' OR employee_id LIKE '%%';

基础查询总结

一、语法
select 查询列表 from 表名;

二、特点

  1. 查询列表可以是字段、常量、表达式、函数,也可以是多个
  2. 查询结果是一个虚拟表

三、示例

  1. 查询单个字段
    select 字段名 from 表名;

  2. 查询多个字段
    select 字段名, 字段名 from 表名;

  3. 查询所有字段
    select * from 表名

  4. 查询常量
    select 常量值;
    注意:字符型和日期型的常量值必须用单引号引起来,数值型不需要

  5. 查询函数
    select 函数名(实参列表);

  6. 查询表达式
    select 100/1234;

  7. 起别名
    ①as 查询多个时可读性好
    ②空格 查询单个时简洁

  8. 去重
    select distinct 字段名 from 表名;

  9. 加号 +
    作用:做加法运算
    select 数值+数值; 直接运算
    select 字符+数值;先试图将字符转换成数值,如果转换成功,则继续运算;否则转换成0,再做运算
    select null+值;结果都为null

  10. 【补充】concat函数
    功能:拼接字符
    select concat(字符1,字符2,字符3,…);

  11. 【补充】ifnull函数
    功能:判断某字段或表达式是否为null,如果为null 返回指定的值,否则返回原本的值
    select ifnull(commission_pct,0) from employees;

  12. 【补充】isnull函数
    功能:判断某字段或表达式是否为null,如果是,则返回1,否则返回0

条件查询总结

一、语法
select 查询列表 from 表名 where 筛选条件

二、筛选条件的分类

  1. 简单条件运算符
    > < = <> != >= <= <=>安全等于
  2. 逻辑运算符
    && and
    || or
    ! not
  3. 模糊查询
    like:一般搭配通配符使用,可以判断字符型或数值型
    通配符:%任意多个字符,_任意单个字符
    between and
    in
    is null /is not null:用于判断null值
  4. 两者的比较 is null PK <=>安全等于
普通类型的数值 null值 可读性
is null ×
<=> ×
原创文章 97 获赞 43 访问量 1万+

猜你喜欢

转载自blog.csdn.net/shao_yc/article/details/105693653
今日推荐