数据库基础语句学习
Posted java2018819
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库基础语句学习相关的知识,希望对你有一定的参考价值。
在sql语句中所有的日期类型和字符串类型都要用单引号( ‘‘ )括起来
1、 DDL(数据定义语言): create database my_test; //创建一个my_test数据库。
use my_test; //使用my_test数据库。
create table students ( id int(10) , name varchar(20) ); //创建一个带 id name 两个字段的students表。
drop table students; //删除表students
rename table students to student; //将表名students改为student
show tables; //查看所有表
desc students; //查看表students的所有字段
alter table students add gender varchar(20); //给表students创建一个类型为varchar(20)的字段gender
alter table students drop gender; //删除表students的gender字段
alter table students modify gender varchar(10); //将字段gender的类型varchar(10)修改为varchar(20)
alter table students change name newname varchar(10); //将字段name修改为类型为varchar(10)的字段newname
2、 DML(数据操作语言): insert into students (id ,name ,gender) values (1, ‘zs‘, ‘男‘) , (2, ‘lili‘, ‘女‘); //在表students中插入两条数据,字段和数据的顺序必须一致
delete from students where name=‘zs‘; //删除name为zs的一条数据
delete from students; //删除表students的数据 (数据可以找回)
truncate table students; //删除表students的数据,重新创建一张表 (数据不能找回)
select * from students; //查询表students中的所有数据
update students set name = ww; //将name全改为ww
update students set name=zs , gender=‘男‘ where id=2; //将id为2的name跟新为zs gender跟新为男
修改数据库密码
use mysql; //(进入mysql数据库)
show tables;
desc user; (查看有没有password字段,如果有)
update user set password = password(‘1234‘) where user = ‘root‘;
flush privileges; // 刷新MySQL系统权限相关表(很重要)
3、 DQL(数据查询语言): 通过查询语句查询出来的数据以表的形式展示,我们称这个表为虚拟结果集,存放在内存中。结果集为一张虚拟表。
DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。
select * from students; //查询表students所有的数据。*表示所有字段,*也可以换成别的字段
select id,name from students; //查询表students中的id,name字段的数据。
select * from students where gender=‘男‘ and/or age=25; //and表示且,or表示或者
select * from students where id in(1,2,3); //in(set) set固定值查询
模糊查询 一个_代表一个字符 %代表任意字符
select * from students where name like ‘_‘; //模糊查询,查询名字有_个数的字符的数据
select * from students where name like ‘%s%‘; //查询名字带有s的名字的数据
select distinct name from students; // distinct去掉重复的,将students表中重复的name去掉后输出name字段数据
select *, ifnull (id,0)+ifnull (score,0) as total from students; //将两个数值型字段id和score加一起变成一个total字段(as表示起别名,as可以省略)
(排序) select * from students order by salary asc/desc,id asc/desc; //根据salary的大小进行 升/降 序排列,如果salary一样,则根据id的大小升/降排列
(聚合函数) select count(*) from students (where salary>2500); //count 查询表中记录数 (统计salary大于2500的记录数) (统计不为null的记录行数)
select sum(salary) ,sum(manage) from students; //求和
select avg(salary) from students; //求平均值
select max(salary) , min(salary) from students; //最大最小值
(分组查询) select gender, group_concat(name) from students group by gender; //根据gender分组并把每组的name显示出来
select depatment , group_concat(salary) , count(*) from tudents where salary > 1500 group by depatment; //查询每个depatment中salary大于1500的个数
select depatment , group_concat(salary) ,sum(salary) from students group by depatment having sum(salary) >= 9000; //having作用与where一样,但只能用与group by 之后
select depatment , grop_concat(salary) , sum(salary) from students where salary > 2000 group by depatment having sum(salary) > 6000 order by
----- sum(salary) asc/desc; //查询salary大于2000,工资总和大于6000的部门的工资和 并按降/升 序排列。( where > group by > having > order by > limit )
4、数据的完整性: 保证用户输入的数据保存到数据库中是正确的。 在创建表是给表添加约束。 完整性分为:实体完整性、域完整性、引用完整性。
4.1、 实体完整性: 概念: 一条数据为一个实体。
作用: 标识每一行数据不重复,行级约束
约束类型: 主键约束、唯一约束、自动增长约束
主键约束(primary key):每个表中有一个主键,数据唯一且不能为null
添加方式:<1> create table person ( id bigint primary key, name varchar(20) );
<2> create table person ( id bigint, name varchar(20), primary key ( id ) );
<3> create table person ( id bigint , xuehao int ( 10 ) , name varchar(20) , primary key ( id ,xuehao) ); //(联合主键)
唯一约束(unique):数据不能重复,但可以为null。
添加方式: create table person ( id bigint primary key,name varchar(20) unique );
自动增长列(auto increment):指定列的数据自动增长,即使数据删除,还是从删除的数据继续往下。
添加方式: create table person ( id bigint primary key auto_increment,name varchar(20) unique);
4、2 域完整性: 使用:限制此单元格的数据正确,不对照此列的其他单元格比较。域代表当前单元格。
与完整性约束:<1>:数据类型:数值类型,字符串类型,日期类型。
<2>:非空约束(no null):create table person ( id int primary key auto_increment, name varchar(20) unique not null );
<3>:默认值约束(default):create table person( id int primary key auto_increment , name varchar(20) unique , gender varchar(10) default ‘男‘ );
4、3 参照完整性: 概念:表与表之间的一种对应关系,通过设置两表之间的主键、外键关系,或编写两表之间的触发器来实现。
表与表建立关系的条件:量表必须都是InnoDB类型、数据库的主键和外键的类型必须要一致
5、多表查询: 5、1 <1> 一对一、一对多、多对多(要建立一个中间表)给中间表的两个字段都插入外键建立关系表。
<2> 为什么要拆分表: 避免大量冗余数据的出现。
5、2 多表查询: 5.2.1 合并结果集: <1> 合并结果集: 把两个select语句的查询结果合并在一起
<2> 方式: 1、 union:合并时去除重复记录。 2、union all:合并时不去重
<3> 用法: select * from a union ( all ) select * from b;
<4> 注意事项:被合并的两个结果:列数、列类型必须相同。
5.2.2 连接查询: 概念:也叫跨表查询,需要关联多个表进行查询。
笛卡尔集:
多表联查,保证数据正确:在查询时要把主键和外键保持一致。 : select * from stu st ,teach tc where st.id=tc.sid;
根据连接方式:<1> 内连接: 等值连接 : select * from stu st ( inner ) join teach tc on st.id=tc.sid;
<2> 外连接 左连接:左边的数据全查出来 left (outer) join on
右连接:右边的数据全查出来 right (outer) join on
<3> 自然连接(natural):不用写条件;要求:两张连接的表中列名称和类型完全一致的列作为条件。(会去除相同的列)
select * from stu natural join score;
6、子查询: 概念: 一个select语句中包含另一个完整的select语句;或两个以上select,那么就是子查询语句了。
子查询出现的位置:<1> where之后,把select查询出来的结果当成另一个select的条件值。
select ename,salary from emp where deptno=( select deptno from emp where ename=‘项羽‘ );
<2> from之后,把查询的结果当成一个新表。
以上是关于数据库基础语句学习的主要内容,如果未能解决你的问题,请参考以下文章