MySQL 从入门到入狱 rm - rf /* 咳咳~ 到精通
做好笔记,勤加练习。 刷多少不重要,重要的是你学了多少。每学完一个视频要问自己是否学会了,囫囵吞枣的刷视频虽然也有一点点效果, 但还是要认认真真学。 我就拿我自己来说,我学前端js时候是看视频都是全程跟老师写代码(相当于没自己练),笔记也不做,跟快餐式的刷视频,也不复习,这样做结果造成了什么,一个月学的东西全部忘了。
咳咳~上面一句正能量 下面我们就开始学习MySQL 请大家三连哦~
为什么要学MySQL ??? 看下面调查
DB 数据库(database): 存储数据的“仓库”。它保存了一系列有组织的数据。
DBMS (Database Management System)。数据库是通过DBMS 创建和操作的容器
SQL 结构化查询语言(Structure Query Language):专门用来与数据库通信的语言。
概念:MySQL数据库属于MySQL AB公司,总部位于瑞典,后被oracle收购
* 优点:~成本低:开放源代码,一般可以免费使用
show databases; 查看所有数据库
use db01 #db01是数据库名称 use 锁定数据库名称
show tables; #查看锁定库里面的表名
show tables from db01; #db01是数据库名 此命令一键查看
mysql> create table stuinfo( #创建表 自己起的表名stuinfo
-> id int,
-> name varchar(20));
Query OK, 0 rows affected (0.02 sec)
desc stuinfo; #查看 stuinfo 表结构
查看mysql版本的三种方式
1:select version(); #登录到mysql服务端
2: mysql --version #未登录到mysql服务端
3: mysql -V #未登录到mysql服务端
一,基础查询
1:进阶1
#语法 select 查询列表 from 表名;
#1. 查询表中的单个字段
select last_name from employees;
#2. 查询表中的多个字段
select last_name,salary,email from employees;
#3. 查询表中的所有字段
select * from employees;
#4. 查询常量值
select 100;
select 'john';
#5. 查询表达式
select 100*98;
select 100%98;
#6. 查询函数 mysql 版本号
select VERSION();
#7. 起别名 也可以把as省略
select 100%98 as 结果;
#8. 去重 关键字 DISTINCT
#案例:查询员工表中涉及到的所有的部门编号
select DISTINCT department_id from employees;
#9. +号的作用
#案例:查询员工名和姓链接成一个字段,并显示为 姓名
select last_name+first_name AS 姓名 from employees;
select CONCAT('a','b','c') AS '结果';
select CONCAT(last_name,first_name) AS '姓名' from employees;
/*
java中的+号
1. 运算符, 两个操作数都为数值型
2. 连接符, 两个有一个操作数为字符串
mysql 中的+号:
仅仅只有一个功能:运算符
select 100+90; 两个操作数都为数值型,则做加法运算
select '123'+90; 其中一方为字符型,试图将宇字符型数值转换成数值型
如果转换成功,则继续做加法运算
如果转换失败,则将字符型数值转换成0
select 'john'+90;
select null+10; 只要其中一方为null, 则结果肯定为null
*/
select '100'+50;
select 'join'+50;
select null+50;
#10. 显示表 departments 的结构,并查询其中的全部数据
desc departments;
# 题目 1. 显示出表 employees 中的全部 job_id (不能重复)
select distinct job_id from employees;
# 题目 2. 显示出表 employees 中的全部列,各个列之间用逗号链接,列头显示成OUT_PUT
# 如果字段中为null 会显示 null 我们用 ifnull 把null替换成0
select concat(first_name,',',last_name,',',IFNULL(commission_pct,0)) as 'OUT_PUT' from employees;
进阶2
#进阶2:条件查询
/*
语法:
select
查询列表
from
表名
where
筛选条件
分类:
一,按条件表达式筛选
条件运算符:> < = != <> >= <=
二,按逻辑表达式筛选
逻辑运算符:&& || !
三,模糊查询: like, between and, in, is null
*/
#案例1:查询工资>12000的员工信息
select * from employees where salary > 12000;
#案例2: 查询部门编号不等于90号的员工名和部门编号
select last_name,department_id from employees where department_id != 90;
select last_name,department_id from employees where department_id <> 90;
# && 和 and 两个条件都为true,结果为true,反之为false
# || 或 or 只要有一个条件为true,结果为true,反之为false
# ! 或 not 如果链接的条件本身为false,结果为 true,反之为 false
#案例1:查询工资在10000到20000之间的员工名,工资以及奖金
select last_name,salary,commission_pct from employees where salary >=10000 and salary <= 20000
#案例2:查询部门编号不是在90到110之间,
select * from employees where department_id<90 or department_id > 110 or salary>15000;
select * from employees where not(department_id>=90 and department_id <=110) or salary>15000;
select department_id from employees
#模糊查询
/*
like
特点:
1. 一般和通配符搭配使用
通配符
% 任意多个字符,包含0个字符
—— 任意单个字符
*/
#案例1:查询员工名中包含字符a的员工信息
select * from employees where last_name like '%a%';
#案例2:查询第三个是s第五个是i的员工名和工资
select last_name,salary from employees where last_name like '__s_i%';
#案例3:查询员工名中第二个字符为_的员工名 ESCAPE表示$是个转义字符
select last_name from employees where last_name like '_\_%';
select last_name from employees where last_name like '_$_%' ESCAPE '$';
#2. between and
#案例1:查询员工编号在100到200之间的员工信息
select * from employees where employee_id >=100 and employee_id<=200
select * from employees where employee_id between 100 and 200
#3. in
#案例:查询员工的工种编号是
select last_name,job_id from employees where job_id in('AD_PRES','AD_VP','IT_PROG');
#4. is null
#案例1:查询没有奖金的员工名和奖金率
select last_name,commission_pct from employees where commission_pct is null
select last_name,commission_pct from employees where commission_pct is not null
#安全等于 <=>
select last_name,commission_pct from employees where commission_pct <=> null;
#查询员工号为176的员工的姓名和部门号和年薪
select last_name,department_id,salary*12*(1+IFNULL(commission_pct,0)) as '年薪' from employees;