1 show databases;显示所有的数据库–cmd命令;
2 test自带数据库,用于测试;
3 进入数据库 use test;
4 显示表:show table;/show tables from db;
5 查看数据库的版本:select version();
mysql --version----dos命令;
mysql -V;
6 常见的命令:
查看表:show tables;
查看其他库的表:show tables from db;
7 查看表结构:desc 表名;
8 开发规范:不区分大小写,建议关键字大些,表名,列名小写
9:每条命令用分号结尾;
10 可以换行;
11 注释#注释文字;
– 空格 注释;
多行注释 /* */
数据库Mysql介绍
ddl:数据库定义语言
dcl:数据库控制语言
dql:数据库查询语言
dml:数据库操作语言
保存部门的id,可以节约大量的空间,减少数据的冗余;
查询的东西select
1 查询的列表可以是:表中的字段,常量值,表达式,函数;
2 查询的结果是虚拟的表格
良好的习惯
1 use db;
2 ` `esc下面的着重号:为了可读性!防止关键字误导;列名和关键字;区分是不是字段;**
3 执行谁选中谁;
4 书写正确标准;
查询常量
select 100;
select ‘a’ /select “hello”:不区分字符和字符串;
查询表达式 select 100+1;
查询函数:select version();
起别名
select a as b;
select a b;
为了区分关键字和其他把别名进行字符串的包括;
去除重复
select distinct name from table;
"+"的作用
仅仅有一个功能:运算符;
1 两个操作数都是数字进行加法运算
2 一方位字符型,把字符转换为数字进行运算;
3 如果转换失败 一方为0,进行结果的输出;
4 null+数字:返回null;
5 concat:拼接函数;select concat(“a”,‘b’) as ab;
## 查看表的结构
1 desc table;
2 注意中文和英文的逗号状态;
3 进行拼接;concat();
4 判断函数ifnull();进行拼接的售后如果为null,就赋值为0;
条件查询
1 根据条件表达式进行 where 条件;
2 条件运算符 < > = != <>:有小有大就是不等;
3 根据逻辑表达式进行查询:&& ! || and or not用于连接条件表达式
4 **模糊查询: like /between /and/ in/ is null **
19 模糊查询
1 % 任意多个字符
2 like %a% 匹配只要包含a就会查询出来;
3 匹配: ”_a_a%“
4 第二个字符为_ 的信息:‘‘ $%’ $进行转义;
20 between and
1 查询的时候是包含临界值的;
2 使用 in提高简洁 里面的内容要统一;‘123’ 和123 可以转换;
21 is null
查询某一个部门没有奖金 is null;
有奖金 is not null;
= <> 不能判断null;
数字不能is;
22 安全等于 不建议使用:可读性比较低
不为null <=>
不为1000 <=>
sql语句练习
一 查询没有奖金,且工资小于20000
select * from employee where salary<20000 and 奖金 is null;
二 查询工作不为玩,或者工资为12000
select * from employee where 工作<>玩 or salary=12000;
三 查看部门的表结构
desc table;
四 查看都有哪些部门
select distinct id from employee
五 select * from table 和select * from table where id like?
当字段为null的时候是不一样的;
排序查询
select * from table order by salary desc 降序大的在上面;
asc:升序小的在上面;啥都不写默认是升序;
查询部门编号>90的员工信息,按照入职时间的先后顺序进行排序;
1select * from table where id>=90 order by time asc;
2 根据年薪的高低显示员工的信息和年薪(可以根据表达式)
select * , salary*12+(ifnull(a)) as 年薪 order by 年薪表达式;
order by 后面支持别名;
3 按照姓名的长度进行排序
select length(name) from table desc;
4 排序查询,查询员工的信息,按照工资升序,id降序;
select * from table order by salary asc,id desc;
5 order by是where 查询之后的进一步的条件,都是放在最后
sql测试题
1 根据年薪降序排列,薪水升序;
select * from table order by 年薪 desc,salary asc;
2 插查询工资不在10000到21000之间的,按照工资降序;
select * from table where salary not between 10000 and 21000 order by salary desc;
3 查询邮箱中包含e,按照邮箱的字节数排序,然后根据薪水升序排列
select * from table where email like %e% order by length(email),salary asc;
常见函数的介绍
函数:类似java的方法,实现谋个功能的语句,调用就可以,方法封装了逻辑,隐藏了细节,提高了嗲吗的复用;
select 函数名() from table;(可选)
特点:方法叫什么名字;干什么???
单行函数 concat() ifnull() length()有返回值;
字符函数,
length();获得参数的字节个数;
concat()字符串拼接函数;
upper();lower():大小写的转换;
substr(“asasasa”,2);在mysql中下标从1开始
substr(“asasas”,1,3);截取从1开始,字符长度三个的字符串;
首字母大些,其他的小写进行拼接:concat(upper(substr(“name”,1,1),"_",lower(substr(name,2)))) as output;
select instr(“asasasa”,“as”);返回子串第一次在大串的索引,没有返回0;
trime()去除空格;
select lpad(“asas”,10,"*"):用右边的进行填充制定长度-----rpad右边填充;
select replace(“hello,ppx”,“ppx”,“ppg”) as md;
数学函数,
select round(100.9); 100
seelct round(121.1213) 121
ceil():向上取整
floor()相反;
truncate()截取几个;
mod()求余
日期函数,流程控制函数----if else();
多行函数:进行统计,一组值,统计函数,聚合函数;
日期函数
select now():当前的函数;
curdate():当前的日期,不包含时间
curtime():当前的时间,部包含日期;
select year(now()):返回年
select month(now())
str_to_date():字符串转日期;
date_format():格式日期;
select DATE_FORMAT(NOW(),"%Y年%m月"):大些的M显示的是英文的月;
流程控制函数
if()==if else
SELECT IF(1>2,“yes”,“no”)as ppx;类似于三目运算符;
流程控制函数case
case==switch case in java;
其他函数
select version();
select database();
select user();
常见的函数总结
二分组函数的介绍
用于统计:
聚合函数;
sum() avg() max() min() count()
函数之间可以嵌套 rount(avg(salary,2))
参数支持的类型
sum().avg():适合数值的计算,其他的比如日期是没有意义的;
max() min():支持字符串,日期类型,任何
count()什么类型都支持;
count():计算非空的东西,不为null;;
sum()和avg()忽略null
max() min()同上
所有的分组函数忽略null
3 和distinct搭配使用,分组函数
select sum(distinct salary) from employee,-------------去除重复
count()可以去除重复
max() count():同上
4 具体的count()函数
select count(*) from employee;
只要有一个字段不为null,都会被统计上;
处理个数一般使用count(*),这个比较稳定;
select count(1) 有多少行,就有多少个1;
count()可以添加常量,就有同样的效果
效率的问题
count(*)的效率最高---------------mysisam
count(*)和count(1)-------------效率差不多,比count()字段的效率要高;
一般用count(*)统计行
分组函数使用的注意事项
select avg(salary),id from employee ;
虽然不报错,但是id没有意义
分组函数-------------------------------------------------------------------------
求两个日期相差的天数
select datediff();-----------传入两个日期是字符串类型的,也可以是date类型的;
select datediff(now(),‘2018-8-10’;
select datediff(max(),min());
分组函数
1 查询部门的id,根据部门的位置
select count(*) from emplyee group by location;