数据库基础语句学习

                  在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之后,把查询的结果当成一个新表。

                           

                                         

 

                  

                  

                  

  

                  

                  

                  

                  

                  

                  

猜你喜欢

转载自www.cnblogs.com/java2018819/p/9876075.html