文章目录
SQL
1.什么是sql
结构化查询语言:其实就是定义了操作所有关系型数据库的规则,每一种数据库的操作的方式存在不一样的地方,称为方言
2.SQL通用语法
1.SQL 语句可以单行或者多行书写,以分号结尾。
2.可以使用空格和缩进来增强语句的可读性
3.mysql不区分大小写
3.SQL的分类
DDL:Data Manipulate Language数据库定义语言(操作数据库,表)
1.C:创建
创建表:create table 表名{ 列名 数据类型 comment '注释', 列名 数据类型 ... 列名 数据类型 }
数据类型:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P2NNT0ie-1652339935629)(C:\Users\HP\Desktop\1.png)]
2.R:查询
所有表:show tables
表结构:desc 表名U:修改
1.修改表名 alter table 表名 rename to 新的表名 2.修改表的字符集合 alter table 表名 character set 字符集名称 3.新添加一列 alter table 表名 add 列名 数据类型 4.修改列的名称 类型 alter table 表名 change 列名 新列名 数据类型 :又改类型又改名称 alter table 表名 modify 列名 新数据类型 :只改类型 5.删除列 alter table 表名 drop 列名
D:删除
drop table 表名 if exists 表名 //如果存在就删除
DMLData Manipulate Language(增删改表中的数据)
1.添加数据
insert into 表名(列名,列名,列名)values(数据1,数据2,数据3) //如果不加 列名列表 默认添加一行中所有列的数据,要写全 除了数字类型其他所有的数据类型都要加引号 ------- 例如 学生表 stu_name stu_age stu_gender tel not null null yes not null insert into 表名(stu_gender,stu_name,tel)values(数据1,数据2,数据3) 添加的时候列名可以混乱,但是value要对应混乱的字段,不为空的必须添加,可以为空的可以选择不添加
2.修改数据
updata 表名 set age=5,name=xxx 条件(where id=xxx) //如果不加条件默认修改所有行的age属性
3…删除数据
delete from 表名 where 条件id=1等等
DQLData Query Language(查询表中的数据)
👿查询数据,非常重要
基础查询
select 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组后的条件 order by 排序 limit 分页限定
--------------------------------
select address from student----可能有重复的结果集,,用
select distinct(不同的鲜明的) address from student
--------------
查询几个字段相加的和
select math+ifnull(English,0) from student //因为如果有字段为null和任何相加都为null,函数ifnull(字段名,默认值)解决了这个问题
查询结果的字段列名为 math+English或者math+ifnull(English,0),这时候可以
针对上述可以起别名 As name as可以省略
条件查询
1. where 子句后面跟条件
2.运算符,(表达式结果)
age>=20;age>20;age=20;age!=20或者age<>20也是不等于
age>=20 AND(和&&)age<=30 /**在20到30岁之间:这里是同一个字段的条件**/
或者:select * from student where age between 20 And 30
not关键字,对查询除了条件之外的
age=20 OR(||或者) age=30 /**年龄20或者30岁*/
或者age IN(20,30)条件集合
ps:null不能使用运算符,要使用is或者is not关键字
模糊查询:
LIKE关键字
用占位符: _:单个任意字符 %:多个任意字符 (简易的正则表达式)
查询名字以张开头的: where name LIKE '张%'
'%张%':包含张的
计算列
对于要查询的列进行处理之后再显示出来 select 30-age from student where age>20;c查询大于20岁的人距离30岁还有几年 select 2021-age from student;查询出生年份
排序查询
语法: order by 排序字段1 排序方式1
如果不写排序方式默认的方式就是升序,从小到大
/**多个排序的字段的时候,意思是如果第一排序字段相同的时候,按照后面排序方式**/
排序方式:ASC 升序,默认的
DESC :降序
聚合查询
定义:将一列数据作为一个整体,进行纵向的计算
---------------------------------
sql函数:
count 计算个数,统计数据条数 max,min 最大最小值 sum 计算和 avg 计算平均值,时间函数now(),sysdate()获取系统时间:在添加值的时候用values(xxx,now():获取当前时间)
字符串函数:concat('a','b','c'):字符串的拼接 upper(字段):将字符首字母大写 substring(stu_tel,8(从1开始的第几位),4(截取多少位))
ps:select concat('a',stu_name) from student
结果: a张三
------------------------------
栗子:count(列名):计算值一列有多少条
ps:聚合函数的计算是默认排除了null值
解决方法:
1.选择不包含非空的值
2.ifnull函数将null值替换为指定的默认值
分组查询
语法: ground by 分组字段
2.注意 1.分组之后查询的字段:分组字段/聚合函数 写其他的没有意义
2.where和having的区别
where在分组之前进行限定,如果不满足条件,则不进行分组,having在分组之后限定,如果不满足结果,则不会被查出来
where不可以跟聚合函数,having可以进行聚合函数的判断
没有group by是绝对没有having的
-----------------------------------------------------------
例子: select * from studnet group by gender,按照性别分组查询
你会发现不论表中有多少条数据,只会查出两条,所以这个*号没有任何意义,一般查询分组字段和聚合函数
ps:select 分组字段 from student group by 分组字段:这个可以查看该分组分为了哪些组
select stu_gender,count(stu_id) from stu group by stu_gender;统计按照男女分组后每个组的人数
|stu_gender|count(stu_id)|
| 男 | 5 |
|女 | 6 |
分页查询
语法:limit 开始的索引,每页查询的条数
开始的索引等于(当前页码-1)乘以每页显示的条数
- DCL(权限和安全的访问)
约束
-
概念,对表中的数据进行限定,保证数据的正确性,有效性和完整性
分类:
主键约束
----primary key 非空且唯一,一张表只有一个字段为主键(可以是一列或者是多列) 添加:1.创建表的时候添加约束 2.DDL对 alter table user 删除:alter table 表名 drop primary key 自动增长 :如果某一列是数值类型的,使用 auto_increment 可以完成值的自动增长 添加:在创建表的时候就添加:DDL添加 删除 alter table 表名 modify 字段 类型
联合主建
- 当一个表的一个字段不能唯一找出一组数据的时候就需要用到联合组件
如: 学生表 id sex name 课程表 id course_name 成绩表 学生id 课程id 分数 这个时候学生id和课程id都不能唯一确定出来一组数据 只有 学生id加上课程id才能唯一确定出一个分数 ----- 创建: create table score( stu_id varchar(20), course_id int score id primary key(stu_id,course_id) )
非空约束
---- not null 添加:1.创建表的时候添加约束 2.DDL对 alter table user 删除: DDL
唯一约束
---- unique 唯一约束可以有null值但只能有一个 添加:1.创建表的时候添加约束 2.DDL对 alter table user 删除 唯一约束 Alter table suer Drop index 唯一约束列表
外键约束
----- foreign key 1.在创建表的时候,可以添加外键 create table 表名( ... 外键列 单独起一行: constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称) ) 2.创建之后添加: alter table 表名 add constraint 外键名称 foreign key (外键列名称) reference 主表名称(主表列名称) /*级联更新删除**/ on update(delete) cascade 3.删除 alter table 表名 drop foreign key 外键名称 ---------------------- alter table sfz add constraint sfz_student foreign key (s_id) REFERENCES student(id) on update cascade
数据库的设计
-
多表之间的关系
-
分类
1.一对一
如身份证和人
或者不设置外键,让两个表的主键一一对应2.一对多
如:部门和员工
3.多对多
如:学生和课程
-