SQL的一点语法

sql看了一半发现课设用不上了

有点死心

不过还是得说json真好使。

大三估计得正式学数据库,删了有点可惜先丢这了。

SQL语法

DLL 数据定义语言

创建数据库

  • create database .创建数据库
  • show database. 显示已有数据库
  • create database if not exists . 不存在这个名字的数据库就创建
  • create database character set uft8. 创建数据库的同时指定字符集
  • show create database . 显示指定数据库的创建指令

修改数据库

  • alter database character set gbk.更改对应数据库的字符集

删除数据库

  • drop database . 删除数据库

切换数据库

  • use . 切换数据库

创建数据表

  • create (row_1 char(8) not null unique,row_2 varchar,row_3 int,….,row_n char) 。row_i可以是对应列的名字。
    • char是不可变字符组。char后补(num)指定这一列的最长长度,不够这个长度会补空格。
    • varchar是可变字符组。varchar后补(num)指定这一列的最长长度,不够这个长度不会补空格。
    • not null后缀用以确保该列信息必须填写。不持有这个后缀的信息列,不填充信息则会默认为null
    • unique后缀用以确保该列中信息唯一,即该列中不能填写相同的信息。

查询数据表

  • show tables 查询数据表列表奥
  • desc 。查看特定表的结构

删除数据表

  • drop table 。删除数据表

修改数据表

  • alter table rename to .修改表名
  • alter table character set utf8.修改表的字符集
  • alter table add 。对表添加一种新的字段
  • alter table change .。修改表内的一个字段名和类型
  • alter table modify .只修改字段类型

SQL数据类型

数值类型

  • tinyint -128~127
  • smallint -32768~32767
  • mediumint 3byte
  • int 4byte
  • bigint 8byte
  • float 单精度
  • double 双精度
  • decimal(n,m) 双精度。括号内指定数字位数和小数点后位数。即最多有m位,n个小数点后位数

字符类型

  • char 0~255 定长
  • varchar 0~65535 可变长度
  • tinybolb 0~255 存储二进制字符串。也就是说可以通过二进制字符串转换来存图片之类的。/
  • bolb 0~25535 存储二进制字符串
  • mediumbolb 0~16677215 存储二进制字符串
  • longblob 0~4294967295 存储二进制字符串
  • tinytext 0~255 文本数据
  • text 0~65535 文本数据
  • mediumtext 文本数据
  • longtext 文本数据

日期类型

  • date 。只能存放年月日。没有时分秒。格式 2021-09-13
  • time 。 11:11:23。只有时分秒
  • year。2021.只有年份
  • date time。 2021-09-13 11:12:13.存放年月日时分秒
  • timestamp。20210913 111213.年月日时分秒。但中间没有分隔。时间戳

字段约束

  • 非空约束。限制此列的值必须提供。

  • 唯一约束。此列的值不能重复

  • 主键约束。表中记录的唯一标识。可以是一个列,也可以是多个列的组合

    • 创建表的时候定义主键。 create table (classid varchar(15) primary key)或者create table (classid varchar(15) ,primary key(classid))

    • 删除数据表主键约束。alter table drop primary key

    • 主键自动增长。create table (classid int primary key auto_increment )。自动增长只保证唯一性不保证连续性。

    • 联合主键。create table (classid varchar(15),stuid varchar(15),primary key(classid,stuid))

  • 外键约束

DML 数据操作语言

添加数据

  • insert into () values() 。tbname后面的括号里用来指定赋值的字段,values里用来赋值。

删除数据

  • 从数据表中删除满足需求的数据。delete from where .
    • conditions里用来指定特定数据。通过对字段的判断来进行条件的选择。如classid=’10010‘或者stu_age>20

修改数据

  • update set =’…‘ where classid=’…’

DQL 数据查询语言

从数据表中提取满足要求的记录

  • select ,, from [where conditions] 。sname指定要要查询指定数据的哪些字段。tbname指定表。如果要显示查询到的所有字段,就用*来替代字段名的列表。

where子句

删除修改查询语句后都可以加入where子句,用于筛选满足特定条件的数据进行删除修改查询。

  • 条件。

    • = 等于,精确匹配。
    • != 不等于
    • <> 小于或者大于,即不等于
    • 大于小于,大于等于,小于等于和其他语言的语法一致
    • betwe and。相当于是区间查询。select * from class class_time between 18 and 20
  • 多条件查询。通过多个条件来筛选数据

    • and 相当于是&&。where and
    • or 相当于是||。where or
    • not 用在between and前,表示区间反转。select * from class class_time not between 18 and 20

LIKE子句

模糊查询

  • select * from where like
    • 如:select * from stus where stu_name like ‘%o%’ 可以把名字中所有含有o的记录显示出来
    • 在like关键字的表达式中,%表示任意多的字符,_表示任意一个字符

查询结果处理

  • 计算列和别名。可以对数据表中查询的列,进行一定计算再显示出来。别名是在显示的时候对字段使用其他的名字

    • 如:select as ,2021-, from [where conditions] 那么第二行给出的数据会是2021-对应栏数值得到的数据。同时第一栏的数据的字段名将用sname4来显示
  • 消除重复行。在查询结果中将数据重复的数据删除。select distinct from

查询结果排序——BY排序

  • select from where order by ,,…., [asc||desc]

    • 代表根据sname2,sname3…,snamen的内容对查询到的信息进行排序显示,其中越在前的优先级越高。

    • 默认是升序排列。后缀的asc代表升序,desc代表降序。

聚合函数

聚合函数是指SQL提供的对数据表中的某些列进行运算的函数

  • count() 统计函数。统计满足条件的指定字段数的记录数,如:

    • 统计学生表中的学生人数

      • select count(stu_num) from stus
    • 统计学生表中的男生人数

      • select count(stu_num) form stus where stu_gender=’男’
  • max()。找出查询信息中的最大值记录

  • min()。最小值

  • sum()。计算和

  • avg()。求平均值。

日期函数

对日期类型添加数据,可以采用字符串赋值,但字符串的形式必须是yyyy-MM-dd hh:mm:ss。用当前日期插入到数据列中,用函数now()或者sysdate()

获取当前系统时间可以用select now()或者select sysdate()

字符串函数

  • concat(sname1,sname2,….) 。把指定的字符串拼接起来。

    • 如:select concat(stu_name,’-‘,stu_age) from stus
  • upper(sname) 。将对应的字符串都改成大写

  • lower(sname)。将指定字符串都改成小写。

  • substring(sname,n,m)。截取字符串,从对应的字符串的第n位往后截取m位来显示。如果n写start就指代从第一位开始

分组查询

分组就是对数据表中指定的列进行分组

  • select by
    • select … from group by [having ]
    • 根据sname1对tbname进行分组。其中…表示要求选择显示的字段。如果…替换成*,则只会显示每个分组的第一个记录。
    • having语句内表示条件,是对分组后的结果进行指定条件的筛查。

分页查询

数据表中的记录比较多,一次性查询过多,则可以分页展示

  • limit n,m 从第n条开始显示,共显示m条数据。limit语句放在语句末尾。也就是在where,order之类语句之后。
    • 如:select stu_name form stus limit 0,3

关联关系

一对一

  • 主键关联。不同表中主键相同即相关联。
  • 唯一外键。任意一张表中添加一个外键字段来与另外一个表关联。

一对多

  • 在多的一端设置外键,然后与一的部分进行关联。

多对多

  • 额外创建一个关系表。用来维护多对多的关联。

  • 关系表中的字段中有多个外键。分别用来指代不同的多。

外键约束