DB:DBMSSQL数据库(database):存储数据的“仓库”。它保存了一系列有组织的数据。
DBMS:数据库管理系统(Database Management System)。数据库是通过DBMS创建和操作的容器
SQL:结构化查询语言(Structure Query Language):专门用来与数据库通信的语言。
常见的数据库管理系统:MySQL、Oracle、DB2、SqlServer等
1、不是某个特定数据库供应商专有的语言,几乎所有DBMS都支持SQL
2、简单易学
3、虽然简单,但实际上是一种强有力的语言,灵活使用其语言元素,可以进行非常复杂和高级的数据库操作。
MySQL数据库隶属于MySQL AB公司,总部位于瑞典,后被oracle收购。
• 优点:
– 成本低:开放源代码,一般可以免费试用
– 性能高:执行很快
– 简单:很容易安装和使用
– 基于共享文件系统的DBMS (Access )
– 基于客户机——服务器的DBMS(MySQL、Oracle、SqlServer)
net stop 数据库名
net start 数据库名
mysql [-h localhost -P 3306] -u root -p
退出:
exit或ctrl+C
1.查看数据库中有哪些数据库
show database
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
1.不区分大小写,但建议关键字大写,表名、列名小写
2.每条命令最好用分号结尾
3.每条命令根据需要,可以进行缩进或换行
4.注释
单行注释:#注释文字
单行注释:-- 注释文字
多行注释:/* 注释文字 */
DQL:数据查询语言(Data Query language)
DML:数据操纵语言(Data Manipulation Language)
DDL:数据定义语言(Data Definition Language)
TCL:事物控制语句(Transaction Control Language)
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;
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;
is null:仅仅可以判断null值,可读性较高,建议使用
<=>:即可以判断null值,又可以判断普通的数值,可读性较低
select last_name,department_id,salary*12*(1+ifnull(commission_pct,0)) as 年薪
from employees
where employee_id=176;
答案:不一样,如果判断的字段有null值。
select 查询列表
from 表
[where 筛选条件]
order by 排序列表 asc|desc # 默认数升序
select * from employees order by salary desc;
select *,salary*12*(1+ifnull(commission_pct,0)) 年薪
from employees
order by 年薪 desc;
# order by salary*12*(1+ifnull(commission_pct,0)) desc;
select length(last_name) 姓名长度,last_name,salary
from employees
order by length(last_name) desc;
select *
from employees
order by salary asc,employee_id desc;
# order by 子句中可以支持单个字段、多个字段、表达式、函数、别名
# order by 子句一般是放在查询语句的最后面,limit子句除外
select last_name,salary
from employees
where salary not between 8000 and 17000
order by salary desc;
select *,length(email)
from employees
where email like '%e%'
order by length(email) desc,department_id asc
1.单行函数
如:concat、length、ifnull
2.分组函数
功能:做统计使用,又称为统计函数、聚合函数、组函数
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;
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
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()) 月;
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();
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;