目录
对库的操作:
cmd链接到数据库:...............mysql -u root -proot;
创建一个数据库:....................create database 数据库名称 ;
查询库(显示所有数据库):show databases;
选中(使用/切换)库:..........use database 数据库名称;
删除数据库:..............................drop database 数据库名称;
修改数据库:..............................alter database 数据库名称 character set utf8
对表的操作:
创建表:create table 表名(id int,name varchar(10),age int,class int,score double,bornddate time);
查询表:select * from 表名;
展示表:show tables;
查看表信息:desc 表名;
表增加列:alter table 表名 add 新列名 数据类型;
表修改列名:alter table 表名 change 列名 新列名 数据类型;
表删除列:alter table 表名 drop 列名;
删除表:drop table 表名;
约束
非空约束(保证字段的值不能为空):
create table 表名(name varchar(20) not null);
默认约束(添加值为空时,设置默认值):
create table 表名(name varchar(20) default ‘佚名’);
主键约束(保证数据不为空且唯一):
create table 表名(id int primary key auto_increment);
auto_increment(自增,这样在添加数据时可不写id值,自动加1)
外键约束(限制两个表,某一个字段和另一个表的主键绑定,字段值需根据外表主键,可以为null):
create table 表名(id int primary key auto_increment,foreign key(该表字段名) references 另一个表名(另一个表主键));
create table students(id int primary key auto_increment,team_id int,foreign key(team_id) references teams(id));
students为所有学生表,表里学生分为某几个组,teams为组表,比如组表只有两个组,那students只能是分为两个组和空组
对数据的操作:
命名列:select 'name' as '名字' from 表名;(不会改变数据)
新增数据:insert into 表名 value(1,'zhao',18,6,99.9,'2002-02-28 00:00:00');
删除数据:Delete from 表名称 where 条件;
更新数据:UPDATE 表名 SET name='fu' where 条件(id=1);
查询空行:SELECT * FROM 表名 WHERE name IS NULL;
2.AND:并且
3. <>:不等于, >:大于, <:小于
4.大于等于,并且,小于等于
5.两者之间
6.查询某列为空的数据
7.或
8.查询值为括号里的
9.%x%字段包含x的;x%字段以x开头的;%x字段以x结尾的;
1.order by默认升序
2.按条件查完之后排序
3.asc升序
4.desc降序
5.根据age排序后,achievement在相同age中排序,后面可以加asc或desc
使用函数查询数据(不会改变数据)
1.查询某字段且变成小写lower
2.查询某字段且变成大写upper
3.查询表中被截取后的字段substr对字符串值截取。(5,2):从第五个开始截取两个。
4.Substr也可是查询条件,例:select name from stuwhere substr(name,5,1)=”l”;
5.查询name数据和长度;length
6.将字段空的数据变为0;achievement字段名
1. 查询该字段的和sum
2. 查询该字段的平均值avg
3. 查询该字段的最大值max
4. 查询该字段的最小值(不计空值)min
6. 查询表有多少行count
7. 查询该字段非空数量count
8. 根据条件查询该字段非空数量count
9. 查询该字段不重复的
10. 查询该字段不重复的数量
11. 查询不同性别的数量
12. 根据team_id分组,查询这几个小组和总成绩大于100的小组的总成绩,
Where条件用在表后面,having用在对分组的筛选
Limit关键字:设置查询的条数
- select * from student limit 5; (查询该表前五条数据)
- select * from student limit 2,5; (查询该表第二个数据后面的五条数据)
select语句所有基本关键字的位置:
select XXX from XXX where XXX group by XXX having XXX order by XXX limit
多表查询(从多个表中查询数据)
select s.`stu_name`,t.`steam_name` from student s,teams t where s.`team_id`=t.`id`;
student s(将表名student 简称为s)
此查询方式不推荐
链接查询:
1.内连接(获取两个表交集的所有内容)
select s.`stu_name`,t.`steam_name` from student s inner join teams t on s.`team_id`=t.`id`;(inner join内连接后加要链接的表名,on后加条件)
2.左外连接(左表全部+右表对应内容)
select s.`stu_name`,t.`steam_name` from student s left join teams t on s.`team_id`=t.`id`;(left join内连接后加要链接的表为右表,on后加条件)
3.右外连接(右表全部+左表对应内容)
select s.`stu_name`,t.`steam_name` from student s right join teams t on s.`team_id`=t.`id`;(right join内连接后加要链接的表名为右表,on后加条件)
三个表关联,例如:
select s.`stu_name`,t.`tea_name` from tea_to_stu ts
inner join tea t on ts.`tea_id`=t.`id`
inner join tea t on ts.`tea_id`=t.`id`;
子查询:将select查询结果当作条件
字符串函数:
返回某字段的平均值:select AVG(score) from 表名;
返回某字段的行数:select count(score) from 表名;
返回某字段的最大值:select max(score) from 表名;
返回某字段的最小值:select MIN(score) from 表名;
返回某字段的和:select SUM(score) from 表名;
字符串函数:
字符串连接:select concat(str1,str1...strn);
字符串替换:select insert('这是SQL Server数据库',3,10,'MySQL');
将字符串转为小写:SELECT LOWER('MySQL'); 返回:mysql
将字符串转为大写:SELECT LOWER('mysql'); 返回:MySQL
字符串截取:SELECT SUBSTRING('JavaMySQLOracle',5,5); 返回:MySQL
时间日期函数:
获取当前日期:SELECT CURDATE(); 返回:2020-03-20
获取当前时间:SELECT CURTIME(); 返回:19:19:26
获取当前日期和时间:SELECT NOW(); 返回:2020-03-20 19:50:00
返回日期date为一年中的第几周:SELECT WEEK(NOW()); 返回:12
返回日期date的年份:SELECT YEAR(NOW()); 返回:2020
返回时间time的小时值:SELECT HOUR(NOW()); 返回:19
返回时间time的分钟值:SELECT MINUTE(NOW()); 返回:50
返回日期参数date1和date2之间相隔的天数:SELECT DATEDIFF(NOW(),'2008-8-8'); 返回:4242
计算日期参数date加上n天后的日期:SELECT ADDDATE(NOW(),5); 返回:2020-03-25 19:50:00