SQL数据库语言

概念  

就是存储数据的仓库,实现数据的持久化存储,本质是文件系统

DBMS

数据库管理系统

常见的DBMS:

Database Management System 数据库管理系统

常见的DBMS:

MySQL:Oracle公司的中小型数据库,从6版本开始收费

Oracle:Oracle公司的大型数据库

DB2:IBM公司的大型数据库

SQLServer:Mircosoft微软公司的大型数据库

SQLite:移动端的嵌入式的小型数据库

Java中主要使用的是MySQL和Oracle

数据库结构:

一个DBMS中可以维护管理多个数据库

一个数据由若干张表组成

一个表有若干条记录

一条记录包含了若干个字段

1、数据库的表相当于实体类

2、数据库中的字段相当于实体类的属性

3、根据类创建的对象相当于数据库表中的一行(一条记录)

SQL语言

结构化查询语言Structured Query Language

分类

1、DDL:数据定义语言(Data Defintiion Language )

针对数据库、表进行创建、修改、删除等操作

关键字:create、alter、drop

2、DML:数据库操作语言(Data Mainpulation Language) 

针对表中记录、字段进行操作

关键字:insert、 select、 update等

3、数据查询语言(Data Query Language )

针对数据库的表、记录、字段进行查询

关键字:select 、where、in、 order by、limit  group by 、having等

4、数据库控制语言(Data Control Language)

对数据库的安全级别和访问权限进行管理的

关键字:revoke、 grant 、commit 、 rollack等

登录数据库

1、cmd中输入 mysql -uroot -p密码

2、打开cmd  mysql -uroot -p        换行输入密码

3、软件所提供的的mysql command line client的窗口 输入密码 

SQL

建库:create database 库名; 

判断数据库是否存在,不存在才创建:create database if not exists  库名;

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

删除数据库: drop database 库名;

判断数据库是否存在,存在才删除:drop database if exists 库名;

创建数据库的同时制定编码格式: create database 库名 character set 编码格式;

修改数据库的编码格式:alter database 库名 character set 编码格式;

查询数据库创建时的创建语句以及编码格式: show create database 库名;

指定使用的数据库:use 库名;

表的操作

查看数据库中的表: show tables;

建表:create table 表名 (字段名  字段类型,字段名   字段类型,.........);

判断表是否存在,不存在才创建:create table  if not  exists 表名(字段名 字段类型, 字段名   字段类型);

删除表: drop table  表名;

复制表结构:create table 新表名  like 旧表名;

修改表名:alter table 旧表名 rename 新表名;

查看表结构:desc 表名;

修改表结构

添加新字段:alter table  表名 add  字段名   字段类型;

删除字段:alter table 表名  drop 字段名;

修改字段类型: alter table 表名  modify 字段名  字段类型;

修改字段名:alter table 表名  change 旧字段 新字段 类型;

记录、字段的操作

查询表中所有记录:

select * from 表名;          *表示所有字段(列)

向指定字段添加数据

insert into 表名 (字段1,字段2,...) values (值1,值2,...);

批量添加(所有字段)

insert into 表名 values (值1, 值2, 值3, ...),(值1, 值2, 值3, ...),...;

批量添加(指定字段)

insert into 表名 (字段1,字段2,...) values (值1,值2,...),(值1,值2,...),...;

删除记录

删除所有的记录:        delete from 表名;    truncate table 表名;

注意点: delete 是逐行删除所有的记录

                truncate是删除整张表格,在构建一个结构一样的空表;

根据条件删除指定记录:delete from 表名 where 条件;

修改记录

根据条件修改指定的记录:

 update 表名 set 字段名1 = 字段值1, 字段名2 = 字段值2..............where 条件;

修改所有的记录:

update 表名 set 字段名1 = 字段值1,字段名2 = 字段值2,...;

数据类型

数值类型:

int:整数类型

double:小数类型

例如:salary double(n,m)

n:表示该字段值整数部分小数部分最多有n位

m:表示该字段小数部分最多保留m位

salary double(6 ,  2):此时该salary的最大值是9999.99

日期和时间类型

datetime:包含年月日时分秒 格式:YYYY-MM-DD HH:MM:SS

timestamp:时间戳类型 包含年月日时分秒 格式:YYYY-MM-DD HH:MM:SS

注:

如果某字段的类型是timestamp,而我们不给它赋值或者给它赋值为null,那么系统会给它一个默认值(当前时间)

******timestamp不能为空*****

设置时分秒前必须先设置年月日

时间值需要根据指定格式进行设置

字符串类型

varchar:

例如:name varchar(20):表示姓名字段的值最大20个字符

注:数字、字母、汉字都占1个字符

查询

基础查询

查询全部:select * from 表名;

根据指定字段查询:select  字段名1,字段名2.......from 表名;

去重查询:select  distinct  字段名 from 表名;

条件查询:

1、关系运算符:

and、or、not

&&、||、!

2、关系运算符:

大于、大于等于、小于、小于等于、等于(=)、不等于(!=、<>)

3、指定范围内查询:

between ... and ...

注:含头含尾

select * from student where score between 80 and 100;

4、在指定列表中查询:

in (值1,值2,值3,...)

select * from student where score not in (58,68,78,88);

5、空和非空查询

判断为空 is null

判断不为空 is not null

select * from student where score is null;

6、模糊查询

like

占位符:

_:单个任意字符

%:任意个任意字符

排序查询

使用关键字order by

排序方式:

升序:默认,asc

降序:desc

例如:对员工的销售额进行降序排列

select * from emp order by sales desc;

注:如果多个条件进行排序,只有当前一个条件的值相同时,才会比较第二个条件

格式:order by 排序字段1 排序方式 ,排序字段2 排序方式 ,...

例如:以工资降序的方式查询所有员工,如果工资相同则按销售额升序排列

select * from emp order by money desc, sales;

聚合函数

概念:将一列数据作为一个整体,进行纵向的计算。

avg():计算平均值

sum():求和

max():求最大值

min():求最小值

count():求个数

count()中一般使用非空字段->主键  或者  *计算平均工资

select avg(money) from emp;

计算总销售额

select sum(sales) from emp;

查询工资最高的员工

select * from emp where money = (select max(money) from emp)

统计部门字段为空的人数

select count(*) from emp where department is null;

注:聚合函数的计算排除null值

分页查询

语法:limit 开始索引,每页查询的记录数

注:索引从0开始

公式:开始索引 = (当前页码 - 1) *  每页查询的记录数

每页查询4条记录,查询第3页

select * from emp limit 8,4;

降序查询员工的销售额,每页显示2条记录,查询第3页

select * from emp order by sales desc limit 4,2;

分组查询

语法:group by 分组字段

注:

分组后查询的字段应该是:分组字段、聚合函数

where和having的区别:    1. where在分组前进行筛选,如果不满足where条件则不进入分组。having在分组后进行筛选,如果不满足则不被查询到    2. where后不能跟聚合函数,having后可以使用聚合函数进行筛选

查询每个部门的平均销售额

select avg(sales),department  from emp group by department;

查询男员工和女员工的最高收入

select sex,max(money)  from emp group by sex;

查询每个部门女性员工的平均销售额,以平均销售额降序方式排列

select avg(sales),department  from emp where sex = "女" group by department order by avg(sales) desc;

查询平均销售额超过9000的部门

select avg(sales),department from emp group by department having avg(sales) > 9000;

查询每个部门男性员工平均销售额超过9000的部门

select avg(sales),department from emp where sex = '男' group by department having avg(sales) > 9000;

查询语句的结构

select

    字段列表

from

    表名

where

    条件列表

group by

    分组字段

having

    分组后的条件

order by

    排序字段 排序方式

limit

    分页

起别名

可以给表、字段起别名,为了区分,为了简化

注:as可以省略

约束

概念:对表中的数据进行限定

分裂:

1、非空约束:not  null

2、唯一约束:unique

3、主键约束:primary key 

4、外键约束:foreign key

非空约束:not null

限定字段值不能为空

1、创建表时,添加非空约束

create table 表名(字段名 字段类型 not null, 字段名 字段类型 [约束], ...);

2、创建表后,添加非空约束

alter table 表名 modify 字段名 字段类型  not null;

3、删除非空约束:

alter table 表名 modify 字段名 字段类型;

唯一约束:unique

限定某一字段值不能有重复

1、创建表时,添加唯一约束

create table 表名  (字段名 字段类型  unique);

2、创建表后,添加唯一约束

alter table 表名 modify   字段名   字段类型  unique;

3、删除唯一约束:

drop table  表名 drop index 字段名;

注意点:

1、唯一约束的值可以是空值,可以存在多个空值

2、一个字段可以同时设置成非空唯一,非空和唯一约束的顺序是任意的

3、已存在重复值得字段不能被设置成唯一的 

主键约束:primary key

特点:

1、非空且唯一

2、一张表中只能有一个字段是主键

3、主键是表中的唯一标识

创建表时,添加主键约束

create table  表名 (字段名   字段类型   primar key);

create table 表名 (字段名   字段类型  ........primary key(主键字段) );

创建表后,添加主键约束:

create table 表名 modify  字段名  字段类型  primary key;

删除主键约束 :

alter  table 表名 drop primary key;

主键自增长:

如果某一字段是数值类型的主键字段,那么可以设置成主键自增长,auto_increment 来实现主键自增长

注意点:

1、主键自增长必须是数值类型(整数或者小数)

2、当添加记录时,不为该字段赋值或者赋值为null,该字段就会自增长

3、第一条自增长的字段值是1

4、从存在的最大值开始+1

5、从已存在的最大值是小数时,自增长值是向上取整

6、只有主键可以设置自增长

创建表时,添加主键自增长

create table 表名(字段名 字段类型 primary key auto_increment.........);

创建表后添加主键自增长

alter table 表名 modify 字段名  字段类型 primary key auto_increment;

创建表后,添加主键的同时设置主键自增长

alter table  表名  modify 字段名 字段类型  primary key  auto_increment ;

删除主键自增长

alter table 表名 modify 字段名 字段类型;

外键约束 foreign key

外键约束可以使表与表之间产生关系

1、创建表时添加外键约束

create table 表名 (字段名 字段类型 primary key, 字段名 字段类型 [约束], ... , 外键字段 外键类型 ,[constraint 外键名] foreign key (外键字段) references 主表名 (主表主键字段));

2、创建表后添加外键约束

alter table 表名 add [constraint 外键名] foreign key (外键字段) references 主表名 (主表主键字段));

3、删除外键约束

alter table 表名 drop foreign key 外键名;

注意点:

1、从表的外键类型必须与主表主键类型一致

2、外键只能指向主键

3、外键保证了数据的正确性和完整性

中间表的创建以及联合主键:

create table 表名 (

外键字段1 外键类型, 外键字段2 外键类型, primary key (外键字段1,外键字段2),

foreign key (外键字段1) references 主表1(主键字段),

foreign key (外键字段2) references 主表2(主键字段),

);

多表

表与表之间的关系

一对一

例如:人和身份证、公司与注册地址

一对多(多对一)

例如:部门和员工、商品和分类

多对多

例如:学生和课程、订单和商品

多表之间的关系的实现

一对一

在任何一方添加外键指向另一方法的主键

一对多

在多的一方建立外键,指向一的一方的主键

多对多

需要借助第三张中间表。中间表至少要包含两个字段,这两个字段都是外键,分别指向两张主表的主键。

多表查询

4.1 交叉查询

语法:select 字段列表 from 表1, 表2;

交叉查询的结果是笛卡尔积,是两张表的所有记录的组成情况

需要使用条件来筛选无用的数据。

4.2内连接查询

在交叉查询的基础上使用where条件来消除无用的数据

语法:

1、隐式内连接查询

select 字段列表 from 表1, 表2 where 条件;

显式内连接查询

select 字段列表 from 表1 [inner] join 表2 on 条件;

注意:inner可以省略不写

4.3外连接查询

语法:

左外连接查询:select 字段列表 from 表1 left [outer] join 表2 on 条件;

右外连接查询:select 字段列表 from 表1 right [outer] join 表2 on 条件;

注意点:

内连接查询的结果是两表的交集

左外连接查询的结果是左表的全部和两表的交集

右外连接查询的结果是右表的全部和两表的交集

子查询

概念:查询中的嵌套查询

例题:查询工资最高的员工信息

(1).查询最高工资

select max(salary) from emp; 结果是10000

(2).查询员工信息,条件是工资值是10000

select * from emp where salary = 10000;

整合

select * from emp where salary = (select max(salary) from emp);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353