本系列文章将重点整理MySQL的基本操作,所有的操作都基于以下的数据库进行:myemployees与girls数据库。数据库 myemployees 包括员工表employees、部门表departments、地理位置表locations、工种表jobs以及工资等级表job_grades。数据库 girls 包括管理员表admin、女神表beauty与男神表boys。
建表的SQL脚本网盘可取:https://pan.baidu.com/s/12Z4iJ1Bc6WyopBawnqt41w 提取码:qijf
一、数据库的好处
二、数据库的常见概念 ★
三、数据库存储数据的特点
四、常见的数据库管理系统
一、MySQL的背景
二、MySQL的优点 ★
三、MySQL的安装
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的可视化工具有很多,个人常用的有Navicat和MySQL Workbench,其实还有一个工具SQLyog
,该工具对于以上规范的支持比较友好,自动将关键字大写,并且在查询某字段时,可以直接通过“哪里不会点哪里”的方式进行查询,避免了手动输入。如下图,字段的输入,可以直接通过双击字段的方式。
上图中,字段的着重号为自动添加,也可以去掉,没有影响。
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 表名;
二、特点
字段、常量、表达式、函数
,也可以是多个三、示例
查询单个字段
select 字段名 from 表名;
查询多个字段
select 字段名, 字段名 from 表名;
查询所有字段
select * from 表名
查询常量
select 常量值;
注意:字符型和日期型的常量值必须用单引号引起来,数值型不需要
查询函数
select 函数名(实参列表);
查询表达式
select 100/1234;
起别名
①as 查询多个时可读性好
②空格 查询单个时简洁
去重
select distinct 字段名 from 表名;
加号 +
作用:做加法运算
select 数值+数值; 直接运算
select 字符+数值;先试图将字符转换成数值,如果转换成功,则继续运算;否则转换成0,再做运算
select null+值;结果都为null
【补充】concat函数
功能:拼接字符
select concat(字符1,字符2,字符3,…);
【补充】ifnull函数
功能:判断某字段或表达式是否为null,如果为null 返回指定的值,否则返回原本的值
select ifnull(commission_pct,0) from employees;
【补充】isnull函数
功能:判断某字段或表达式是否为null,如果是,则返回1,否则返回0
一、语法
select 查询列表 from 表名 where 筛选条件
二、筛选条件的分类
普通类型的数值 | null值 | 可读性 | |
---|---|---|---|
is null | × | √ | √ |
<=> | √ | √ | × |