My sql的深度剖析

一.数据库的创建、删除、使用

数据库的创建:create database  +数据库名

数据库的删除:drop database +数据库名;

数据库的使用:use+数据名;

所有数据库的查看:show databases;

建立数据时如何指定字符集: create database +数据库名+charset utf8;

二.数据库中常用的数据类型:

int  类型

date time表示时间的数据类型如:2011-11-12-15:42:09;

varchar(20)  用来表示字符串,括号里表示的是字符个数

decimal(m,n)精确的表示浮点数的,常用来表示价格,m表示有效数据位,n表示小数点后的位数。

三.表的使用

表的任何一个操作都要指定使用那一个数据库:

如 use java108;

表的建立:

create table +表名(变量/列名+数据类型,变量/列名+数据类型,变量/列名+数据类型............);

表结构的查看:

desc+表名:

查看所有表:

show tables;

表的插入:

1.全列插入:

insert +into +表名+values(数据,数据,数据);

2.指定列的插入:

insert+into +表名(列名,列名,列名)+values(数据,数据,数据);

3.多行数据的插入:insert into 表名 values(数据,数据,数据),(数据,数据,数据),(数据,数据,数据)

My sql的深度剖析_第1张图片

 

表中数据的查看:

1.全部列的查看

建议不要轻易查看如果数据量比较多,会把硬盘IO吃满,或者把网络带宽吃满。

select*from 表名

My sql的深度剖析_第2张图片  

2.指定列的查看:

select  列名,列名,列名 .....from 表名

My sql的深度剖析_第3张图片

表的分页查看:

select*from +表名   limit +数字  offset+数字;(limit表示查看几行,offset表示从第几行开始)

select 列名,列名,列名......limit+数字 offset+数字

My sql的深度剖析_第4张图片

 select 列名 ,表达式如(列名+列名+列名)as +别名+from +表名

My sql的深度剖析_第5张图片

My sql的深度剖析_第6张图片 

针对列名的去重查询:

select +distinct+列名 +from +表名

My sql的深度剖析_第7张图片

 对所有行的数学成绩的数据进行去重查询

针对查询的结果进行排序

select*/列名、列名、列名/from +表名+order by+列名/表达式/别名    根据列名升序排序

My sql的深度剖析_第8张图片

 

select*/列名、列名、列名/from+表名+order by+列名/表达式/别名+desc  根据列名降序排序

My sql的深度剖析_第9张图片

 where  条件查询:

My sql的深度剖析_第10张图片

My sql的深度剖析_第11张图片 

between  .....   and ......表示数据范围

My sql的深度剖析_第12张图片

in(数据,数据,数据)

My sql的深度剖析_第13张图片

 is null/is not null/

My sql的深度剖析_第14张图片

My sql的深度剖析_第15张图片 

=  和<=>

使用=来比较某个值和null的相等关系,结果仍然是null,null又会被当成false,但是如果使用<=>例如

null<=>null其结果返回true 

My sql的深度剖析_第16张图片 

 Like

模糊匹配:%表示任意多个包括0个字符,_表示任意一个字符,__表示任意两个字符

My sql的深度剖析_第17张图片

像第一个 where 语句则表示只要姓名的第一个字符 是孙,后面的是任意值都可以,而第二个where语句则表示只要名字里有一个孙字就可以。

My sql的深度剖析_第18张图片

‘孙_’ 则表示姓名里第一个是孙,第二个是任意字符。‘孙__’表示第一个字符时‘孙’,第二个和第三个字符是任意字符,第三个则表示姓名的第一个和第二个字符是任意字符,第三个字符是孙。

 

表的修改

update +表名+set +列名=   ,列名=, where条件/order by/limit

My sql的深度剖析_第19张图片

表的某一行的删除:

delete from +表名+where 语句/order by/limit;

My sql的深度剖析_第20张图片 

表的删除:drop +table+表名 

 

drop+table+表名;

四.数据库约束

1.not null  指定列不能存储为空的数据

My sql的深度剖析_第21张图片 

2.unique 表示同一列不能插入相同的数据

My sql的深度剖析_第22张图片

3.default  当不插入数据时的默认值

My sql的深度剖析_第23张图片 

4.primary key 主健 相当于 not null 和 unique

My sql的深度剖析_第24张图片

在实际中,大部分的表一般会自带有一个主键往往是一个整数表示的id,一个表里只能有一个主键。

自增主键

primary key auto_increment

My sql的深度剖析_第25张图片 

 自增主键

可以手动指定,这样比较麻烦,也可以让mysql帮我们生成,写null,注意这里并不是给id赋值给null,而是交给数据库使用自增主键。

My sql的深度剖析_第26张图片

 我们可以看到每次id的值都自动加1。

My sql的深度剖析_第27张图片

这时我们再添加一行数据,我们自己指定id为109 ,然后我们再插入一行数据,使用null,这时数据库会使用自动主键,自动加1,这时是在109的基础上加1,而不是在3的基础上加1.

5.foreign key

使表中的数据保证在另一个表中。

My sql的深度剖析_第28张图片

My sql的深度剖析_第29张图片 

像我们再创建第二个表cat 时,在id 后面时我们增加了   foreign key(id) references animal(id),这句的意思是指  cat表里的id 值必须是animal 里面的id值,

因此我们往cat 表里增加id 的值是1,是2都可以但是不能为3.

五.聚合函数

1.count

   count(  )返回查询到的数据的数量

My sql的深度剖析_第30张图片 

计算全列时,列为空值也算一行

 

My sql的深度剖析_第31张图片 

My sql的深度剖析_第32张图片 

计算某一具体列时,null则不算 

 

My sql的深度剖析_第33张图片 

因为name 和math 这一列分别有一个null,所以为3.

sum() 返回查询到的数据的和

My sql的深度剖析_第34张图片

 null的值不加上。

avg() 返回查询到的数据的平均值

My sql的深度剖析_第35张图片

 

max() min()返回查询到的数据的最大值、最小值

My sql的深度剖析_第36张图片

六.group by 子句,先分组然后 进行聚合函数运算

My sql的深度剖析_第37张图片

where+条件   表示的时候先将不符合条件的数据剔除,然后再分组进行聚合运算

My sql的深度剖析_第38张图片

例如 我们求一个性别为男的每个车间的薪资总额

像这个我们就需要先用where语句将女性剔除,然后分部门求每个部门的薪资总额

My sql的深度剖析_第39张图片

 

having +条件 先分组进行聚合运算,然后再将不符合条件的组去除 

 例如:我们求一下部门的薪资总额大于37600的部门,这样的话我们先分组求每个部门的薪资总额然后将薪资总额低于37600的部门去除

My sql的深度剖析_第40张图片

七.联合查询

将多个表合在一起:

例如:我们查一下许仙同学的成绩,那我们需要将学生表合成绩表合在一起

My sql的深度剖析_第41张图片 

将这两个表组合在一起,相当于全排列,一共有8*9=72条数据。这是部分截图

My sql的深度剖析_第42张图片 

 但我们知道这样存在很多无效的数据,我们需要加条件,将有小效数据筛选出来。

My sql的深度剖析_第43张图片

 My sql的深度剖析_第44张图片

例如我们求一下每个同学的成绩

My sql的深度剖析_第45张图片 

第二种写法和第一种写法相同。

以上的连接属于内连接。

外连接:

1.左外连接--- select 字段+表名+left+join+表名+ on+连接条件

1.右外连接----select 字段+表名+right+join+表名+on+连接条件 

而如果数据之间不存在一 一对应的关系 ,如

My sql的深度剖析_第46张图片

像这两张表中,学生表中id=3的学生在分数表中不存在,而分数表中student_id=4的学生在学生表中不存在,两张表并不是一一对应的关系。将两张表里联合找有效数据只会展现一一对应的数据。

My sql的深度剖析_第47张图片

但是如果我们想在这张表中将student中的信息全部展现出来,这时我们可以用左外连接的方式,

My sql的深度剖析_第48张图片 

如果我们想将score表中的信息全部展现出来,我们用右外连接的方式

My sql的深度剖析_第49张图片 

六.自连接

自己和自己进行笛卡尔积,自连接的效果是把行转成列。

例如我们查询一下java成绩比计算机原理成绩高的学生信息,行与行之间没法进行比较。

My sql的深度剖析_第50张图片 

 我们需要进行自连接

注意在进行自连接时我们需要对 表名起个别名,否则会报错。

My sql的深度剖析_第51张图片

My sql的深度剖析_第52张图片 

java为course_id=3,计算机原理为course_id为1,因此我们再加上条件进行筛选就可以了。

My sql的深度剖析_第53张图片 

七.子查询

子查询本质就是套娃

单行子查询  :返回一条记录  用=

例如:查询与"不想毕业''同学的同班同学;

My sql的深度剖析_第54张图片

多行子查询:返回多行记录的子查询  用  in

例如查询'语文'或英文的课程的成绩信息

My sql的深度剖析_第55张图片

八. 合并查询:将两个查询的结果集合并成一个,要求这两结果集的列相同。可以是两个相同的表,也可以是两个不同的表

两个表用union 或union连接

union 会对结果去重(重复的只保留一行)

union all 不去重

例题:查询i课程d 小于3,或者名字为‘java’或者‘math’的课程。

My sql的深度剖析_第56张图片

 

 

 

 

 

 

 

 

 

 

 

 


你可能感兴趣的:(python,开发语言)