知识点和问题
- 1.DB、DBMS、SQL的全称和基本概念是什么?
- 2.SQL的优点
- 3.MySQL产品的特点
- 4.DBMS分为两类
- 5.使用命令行启动和停止服务
- 6.通过命令行登录mysql
- 7.MySql中常见的命令
- 8.Mysql的语法规范
- 9.Mysql的语言分类
- 10.基本查询语句
- 11.条件查询
- 12.is null 和 <=>
- 13.查询员工号为176的员工的姓名和部门号和年薪
- 14.访问select* from employees;和select * from employees where commission_pct like '%%' and last_name like '%%';结果是否一样?并说明原因?
- 15.排序查询的语法规则
- 16.查询员工信息,要求工资从高到低排序
- 17.按年薪的高低显示员工的信息和年薪[按表达式排序]
- 18.按姓名的长度显示员工的姓名和工资【按函数排序】
- 19.查询员工信息,要求先按工资升序,再按员工编号降序【按多个字段排序】
- 20.选择工资不在8000到17000的员工的姓名和工资,按工资降序
- 21.查询邮箱中包含e的员工信息,并先按邮箱的字节数降序,再按部门号升序
- 22.常见函数
- 23.字符函数有哪些?
- 24.数字函数
- 25.日期函数
- 26.流程控制函数
1.DB、DBMS、SQL的全称和基本概念是什么?
DB:DBMSSQL数据库(database):存储数据的“仓库”。它保存了一系列有组织的数据。
DBMS:数据库管理系统(Database Management System)。数据库是通过DBMS创建和操作的容器
SQL:结构化查询语言(Structure Query Language):专门用来与数据库通信的语言。
常见的数据库管理系统:MySQL、Oracle、DB2、SqlServer等
2.SQL的优点
1、不是某个特定数据库供应商专有的语言,几乎所有DBMS都支持SQL
2、简单易学
3、虽然简单,但实际上是一种强有力的语言,灵活使用其语言元素,可以进行非常复杂和高级的数据库操作。
3.MySQL产品的特点
MySQL数据库隶属于MySQL AB公司,总部位于瑞典,后被oracle收购。
• 优点:
– 成本低:开放源代码,一般可以免费试用
– 性能高:执行很快
– 简单:很容易安装和使用
4.DBMS分为两类
– 基于共享文件系统的DBMS (Access )
– 基于客户机——服务器的DBMS(MySQL、Oracle、SqlServer)
5.使用命令行启动和停止服务
net stop 数据库名
net start 数据库名
6.通过命令行登录mysql
mysql [-h localhost -P 3306] -u root -p
退出:
exit或ctrl+C
7.MySql中常见的命令
1.查看数据库中有哪些数据库
show databases
2.Mysql自带那几个数据库,分别用于存储什么?
mysql数据库:用户信息
information_schema:保存原数据信息
performance_schema:性能信息
3.进入指定的数据库
use test;
4.查看指定数据库中的表
show tables;
show tables from mysql;
5.查看当前所在的库
select database();
6.查看表结构
desc 表名
7.查看数据库版本
登录mysql查看数据库版本的方式:
select version();
退出mysql查看数据库版本的方式:
mysql --version
mysql -V
8.Mysql的语法规范
1.不区分大小写,但建议关键字大写,表名、列名小写
2.每条命令最好用分号结尾
3.每条命令根据需要,可以进行缩进或换行
4.注释
单行注释:#注释文字
单行注释:-- 注释文字
多行注释:/* 注释文字 */
9.Mysql的语言分类
DQL:数据查询语言(Data Query language)
DML:数据操纵语言(Data Manipulation Language)
DDL:数据定义语言(Data Definition Language)
TCL:事物控制语句(Transaction Control Language)
10.基本查询语句
select 查询列表 from 表名;
特点:
1.查询列表可以是:表中的字段、常量值、表达式、函数
2.查询的结果是一个虚拟的表格
例子:
use sysy;
select * from jobs;
对于和关键字重名的列明可以使用``引用起来
问题:
1.查询常量值
select 100;
select 'john'
2.查询表达式
select 100*98;
3.查询函数
select version();
4.起别名
select version() as 版本号;
两种方式,使用as关键字,或者使用空格
select salary as "out put" from employees;
5.去除重复
select distinct department_id from employees;
6.查看如下的运行结果:
select '123'+90;
select 'john'+90;
select null+10;
结果:
213
90
null
mysql中的+号:仅仅只是一个功能:运算符
7.mysql如何实现字符串的拼接
select concat('a','b','c') as 结果
select concat(last_name,' ',first_name) as 姓名
from employees;
8.显式出表employees的全部列,各个列之间用逗号连接,列头显示成OUT_PUT
select concat(first_name,',',last_name,',',job_id,',',ifnull(commission_pct,0)) as out_put
from employees;
11.条件查询
1.语法格式:
select 查询列表
from 表名
where 筛选条件;
2.分类
一、按条件表达式筛选
> = < != <> >= <=
二、以逻辑运算符式筛
逻辑运算符:
&& || !
and or not
三、模糊查询
like
between and
#包含临界值
in
#in列表的值类型必须一致或兼容
is null
# =或<>不能用于判断null,is null 或 is not null可以判断null值
例题:
1.查询部门编号不是在90-110之间,或者工资高于15000的员工信息
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;
2.查询员工姓名中包含字符a的员工信息
select * from employees where last_name like '%a%'
3.查询员工名中第三个字符为e,第五个字符为a的员工名和工资
select last_name,salary from employees where last_name like '__e_a%'
4.查询员工名中第二个字符为_的员工名
select last_name from employees where last_name like '_\_%'
或者
select last_name from employees where last_name like '_$_%' escape '$';
5.查询员工编号在100到120之间的员工信息
select * from employees where employee_id between 100 and 120;
6.查询员工的工种编号是IT_PROG、AD_VP、AD_PRES中的一个员工和工种编号
select last_name,job_id from employees where job_id in('IT_PROG','AD_VP','AD_PRES');
7.查询没有奖金的员工名和奖金率
select last_name,commission_pct from employees where commission_pct is null;
12.is null 和 <=>
is null:仅仅可以判断null值,可读性较高,建议使用
<=>:即可以判断null值,又可以判断普通的数值,可读性较低
13.查询员工号为176的员工的姓名和部门号和年薪
select last_name,department_id,salary*12*(1+ifnull(commission_pct,0)) as 年薪
from employees
where employee_id=176;
14.访问select* from employees;和select * from employees where commission_pct like ‘%%’ and last_name like ‘%%’;结果是否一样?并说明原因?
答案:不一样,如果判断的字段有null值。
15.排序查询的语法规则
select 查询列表
from 表
[where 筛选条件]
order by 排序列表 asc|desc # 默认数升序
16.查询员工信息,要求工资从高到低排序
select * from employees order by salary desc;
17.按年薪的高低显示员工的信息和年薪[按表达式排序]
select *,salary*12*(1+ifnull(commission_pct,0)) 年薪
from employees
order by 年薪 desc;
# order by salary*12*(1+ifnull(commission_pct,0)) desc;
18.按姓名的长度显示员工的姓名和工资【按函数排序】
select length(last_name) 姓名长度,last_name,salary
from employees
order by length(last_name) desc;
19.查询员工信息,要求先按工资升序,再按员工编号降序【按多个字段排序】
select *
from employees
order by salary asc,employee_id desc;
# order by 子句中可以支持单个字段、多个字段、表达式、函数、别名
# order by 子句一般是放在查询语句的最后面,limit子句除外
20.选择工资不在8000到17000的员工的姓名和工资,按工资降序
select last_name,salary
from employees
where salary not between 8000 and 17000
order by salary desc;
21.查询邮箱中包含e的员工信息,并先按邮箱的字节数降序,再按部门号升序
select *,length(email)
from employees
where email like '%e%'
order by length(email) desc,department_id asc
22.常见函数
1.单行函数
如:concat、length、ifnull
2.分组函数
功能:做统计使用,又称为统计函数、聚合函数、组函数
23.字符函数有哪些?
1.length 获取参数的字节个数
select length('张hhahaha');
2.concat 拼接
select concat(last_name,'_',first_name) from employees;
3.问题:将姓变大写,名变小写,然后拼接
select concat(upper(last_name),lower(first_name)) 姓名 from employees;
4.截取字串
substr、substring
select substr("李莫愁爱上了陆展元",7);#陆展元 索引从1开始的字符
select substr("李莫愁爱上了陆展元",1,3);#李莫愁
问题:姓名中首字符大写,其他字符小写然后用_拼接,显示出来
select first_name,CONCAT(upper(substr(first_name,1,1)),'_',lower(SUBSTR(first_name, 2,length(first_name))))
from employees
5.查找字符串的起始索引
select instr('杨不悔爱上了殷六侠','殷六侠') as out_put;
# 7
# 返回字串第一次出现的索引,如果找不到返回0
6.去掉字符串的前后空格
select length(trim(' 张 ')) as out_put;#3
select trim('aa' from 'aaaaa张aaaa张aaaa') as out_put;#a张aaaa张
7.用指定的字符实现左填充指定长度
select lpad('殷素素',10,'*') as out_put;#*******殷素素
select lpad('殷素素',2,'*') as out_put;#殷素
8.用指定的字符实现右填充指定长度
select rpad('殷素素',10,'*') as out_put;#殷素素*******
select rpad('殷素素',2,'*') as out_put;#殷
9.字符串替换函数
select REPLACE('张无忌爱上了周芷若','周芷若','赵敏') as out_put;
24.数字函数
1.四舍五入计算
select round(1.65);#2
select round(-1.55);#-2
select round(-1.567,2);#-1.57
2.向上取整
select ceil(1.00);#1
select ceil(2.1);#3
select ceil(-1.2);#-1 返回>=该参数的最小整数
3.向下取整
select floor(1.00);#1
select floor(-2.34);#-3 返回<=该参数的最大整数
4.截断
select truncate(1.6999999,1);#1.6
5.取模
select mod(10,-3);#1
25.日期函数
1.返回当前系统日期+时间
select now();#2020-05-09 14:44:50
2.返回当前系统日子,不包含时间
select curdate();
3.返回当前时间,不包含日期
select curtime();
4.获取指定的部分,年、月、日、小时、分钟、秒
select year(now()) 年;
select year('1998-1-1') 年;
select year(hiredate) 年 from employees;
select month(now()) 月;
select monthName(now()) 月;
5.将日期格式的字符转化成指定格式的日期
select str_to_date('1998-3-2','%Y-%c-%d') as out_put;
select * from employees where hiredate=str_to_date('4-3 1992','%c-%d %Y');
6.将日期转化成字符
select date_format(now(),'%y年%m月%d日') as out_put;#20年05月09日
查询有奖金额员工名和入职时间(xx月/xx日 xx年)
select last_name,date_format(hiredate,'%m月/%d日 %y年') 入职日期
from employees
where commission_pct is not null;
7.查看版本号
select version();
8.查看数据库
select database();
26.流程控制函数
1.if函数
select if(10<5,'大','小');
select last_name,commission_pct,if(commission_pct is null,"无奖金,呵呵","有奖金,嘻嘻") 备注
from employees;
2.case函数
语法1:
case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1
when 常量2 then 要显示的值2或语句2
…
else 要显示的值n或语句n
end
案例:查询员工的工资,要求
部门号=30,显示的工资为1.1倍
部门号=40,显示的工资为1.2倍
部门号=50,显示的工资为1.3倍
其他部门,显示的工资为原工资
select salary 原始工资,department_id,
case department_id
when 30 then salary*1.1
when 40 then salary*1.2
when 50 then salary*1.3
else salary
end as 新工资
from employees;
语法2:
case
when 条件1 then 要显示的值1或语句1
when 条件2 then 要显示的值2或语句2
else 要显示的值n或语句n
end
练习:查询员工的工资情况
如果工资>20000,显示A级别
如果工资>15000,显示B级别
如果工资>10000,显示C级别
否则,显示D级别
select salary 原始工资,
case
when salary>20000 then 'A级别'
when salary>15000 then 'B级别'
when salary>10000 then 'C级别'
else 'D级别'
end 级别情况
from employees;