基本概念与根底操作

  • 基本概念
  • 单表查问
  • 多表查问

1 基本概念

  • 数据类型
  • 完整性束缚
  • 根底语句

1.1 数据类型

  • 字符串

    数据类型大小形容
    char(n),character(n)0~255 byte定长为n的字符串
    varchar(n),charactervarying(n)0~65535 byte最大长度为n的字符串
    tinyblob0~255 byte二进制短字符串
    blob0~65535(64K) byte二进制长文本数据
    mediumblob0~16777215(8M) byte二进制中等长度文本数据
    longblob0~4294967295(4G) byte二进制大文本数据
    clob0~65535(64K) byte字符串大对象
    tinytext0~255 byte短文本字符串
    text0~65535(64K) byte长文本字符串
    mediumtext0~16777215(8M) byte中长文本字符串
    longtext0~4294967295(4G) byte大文本字符串
  • 数字

    数据类型大小形容
    tinyint1byte(Byte)-127~128 / 0~255
    smallint2byte(Short)-32768~32767 / 0~65535
    mediumint3byte(Integer)-8388608~8388607 / 0 ~ 16777215
    int,integer4byte(Integer)-2147483648~2147483647 / 0~4294967295
    bigint8byte(Long)-9223372036854775808~9223372036854775807 / 0~18446744073709551615
    numeric(p,d),decimal(p,d),dec(p,d)-----定点数,p位数 , d位小数
    float4bytefloat(p,d)同定点数
    double8bytedouble(p,d)同定点数
  • 日期

    数据类型大小格局形容
    date3byteYYYY-MM-DD1000-01-01~9999-12-31
    time3byteHH:MM:SS-838:59:59~838:59:59
    timestamp4byteYYYY-MM-DD HH:MM:SS1970-01-01 00:00:00/2038
    datetime8byteYYYY-MM-DD HH:MM:SS1000-01-01 00:00:00~9999-12-31 23:59:59
    year---------------

1.2 完整性束缚

  • 列完整性约束条件
    列规定,限度退出表的数据,保证数据的有效性、正确性和完整性

    # 可对约束条件命名[ CONSTRAINT < 束缚名 > ] < 束缚类型 >
    束缚名称形容关键字其余
    主键束缚每行数据的惟一标识,非空且惟一PRIMARY KEYauto_increment自增长(数字 惟一)
    外键束缚用来让两个表建设连贯,保证数据的一致性和参照完整性FOREING KEYREFERENCES指明参照哪些表的主键
    非空束缚该列数据不能为nullNOT NULL-----
    惟一束缚该列数据各不相同UNIQUE-----
    查看束缚该列的值满足对立的条件CHECK-----
    默认束缚默认值DEFAULT-----

外键束缚
建表时:

[CONSTRAINT 束缚名] FOREING KEY(<column_name> )REFERENCES 主表名(<column_name>);

建表后:

ALTER TABLE <table_name> ADD[CONSTRAINT 束缚名] FOREING KEY(<column_name>)REFERENCES 主表名(<column_name>);

删除束缚:

ALTER TABLE 从表名 DROP FOREING KEY 束缚名;

1.3 根底语句

  • 数据库

    # 查看所有show databases; # 创立 create database <name>;# 进入use <name>;# 查看以后select database();# 删除drop database <name>  
  • DDL

    # 查看所有show tables;# 创立create table <name>(<column_name1> <data_type> [列完整性约束条件],...,[表完整性约束条件]);# 查看所有列show columns form <name>;# 批改alter table <table_name> rename to <new_talbe_name>; # 批改表名alter table <table_name> add <column_name> <data_type>; # 增加一列alter table <table_name> modify <column_name> <new_data_type>; 批改数据类型alter table <table_name> change <column_name> <new_column_name> <new_column_type>; #批改数据类型与表名 alter table <table_name> drop <column_name>; # 删除一列# 删除drop table <name> [cascade|restrict];drop table if exists <name>; # 如果表存在 则删除
  • 表 数据 DML

    # 增加insert into <table_name>(column1,colum2...) values(value1,value2...); # 指定列insert into <table_name>(column1,colum2...) values(value1,value2...),(value1,value2...); # 指定列 批量增加insert into <table_name> values(value1,value2...); # 全部列insert into <table_name> values(value1,value2...),(value1,value2...); # 全部列 批量增加# 批改update <table_name> set column1=value1,column2=value2,... [where 条件];# 删除delete from <table_name> [where 条件];

2 单表查问

  • 根底查问
  • 条件查问
  • 排序查问
  • 分组查问
  • 分页查问
select    字段列表from    表名列表where    条件列表group by    分组字段having    分组后条件order by    排序字段limit    分页限定

2.1 根底查问

# 查问多个字段select <column_name1,column_name2...> from <table_name>;select * from <table_name>; # 查问所有数据# 查问去重select distinct <column_name1,column_name2...> from <table_name>;# 别名 能够省略 空格隔开column_name as alias_column_name

2.2 条件查问

# 条件查问select     <column_name1,column_name2...>from     <table_name>where    <condition1,condition2...>

条件列表

符号含意
>大于
<小于
>=大于等于
<=小于等于
=等于
<> 或 !=不等于
between ... and ...闭区间内
in(...)多选一
like 占位符含糊查问 _ 单个任意字符 % 多个任意字符
is null是null
is not null不是null
and 或 &&单元 4
or 或 ||
not 或 !
# 含糊查问select * from studentwhere address like "%江%";# 区间查问select * from studentwhere math_score between 60 and 80;# 多选一select * from studentwhere address not in("北京","上海","天津","重庆");

2.3 排序查问

select     <column_name1,column_name2...>from     <table_name>order by    <column_name1> [order_type],    <column_name2> [order_type];
符号含意
ASC升序(默认)
DESC降序
以后判断条件相等时,启用后续排序条件

2.4 分组查问

select 聚合函数(column_name) from <table_name>;

聚合函数:将一列数据作为一个整体,进行纵向计算。

函数含意
count统计数量
max最大值
min最小值
sum求和
avg平局值
select     <column_name1,column_name2>from     <table_name>where     <condition1,condition2...> # 分组前的条件限定group by    <column_name1,column_name2...> [having 分组后条件过滤];
分组之后,查问的字段为聚合函数分组字段
where > 聚合函数 > having
where 过滤分组前所有数据,且不能应用聚合函数
having 过滤分组后的数据,能够应用聚合函数

2.5 分页查问

select    <column_name1,column_name2...>from    <table_name>limit    <start_index>,<query_num>;
start_index(起始索引)从0开始
query_num(查问条数) 个别是固定值
个别咱们会固定每页数量 而后查问第几页的数据,start_index = (页码-1)*每页条数

3 多表查问

  • 连贯查问
  • 子查问(嵌套查问)
  • 汇合查问
# 多表查问select * from <table_name1>,<table_name2># 后果为两张表的笛卡尔积 全组合

3.1 连贯查问

  • 内连贯
    表的交加
## 隐式内连贯select 字段列表 from 表1,表2... where 条件## 显式内连贯select 字段列表 from 表1 [inner] join 表2 on 条件
  • 外连贯
    左外连贯:交加+右表补集
    右外连贯:交加+左表补集

一张表的所有数据 + 交加的数据

# 左外连贯 以左表为准select 字段列表 from 表1 left [outer] join 表2 on 条件# 右外连贯 以右表为准select 字段列表 from 表1 right [outer] join 表2 on 条件

3.2 子查问/嵌套查问

在一条查问中 将 一条或多条查问后果 作为 条件 或者 应用

子查问后果应用操作
单行单列比拟
多行单列汇合in/通过谓词做比拟
多行单列虚构表select
  • 谓词
  • any(some)

    # 子查问为 多行单列时 与局部查问后果做比拟 满足一个即可select 字段列表 from <table_name> where <比拟运算符>any(子查问)
    =any 等价于 in
    # 子查问为 多行单列时 与全副查问后果做比拟 须要满足全副select 字段列表 from <table_name> where <比拟运算符>all(子查问)
  • exists

    # 存在 判断子查问是否有查问后果 返回逻辑真与逻辑假select * from <table_name> where exists(子查问)

3.3 汇合查问

  • 并 UNION

    # 查问后果的并集 默认去掉反复元组 UNION ALL 保留所有数据(查问1) UNION [ALL] (查问2)
    查问的列数保持一致
  • 交 INTERSECT

    # 查问后果的交加(查问1) INTERSECT (查问2)
  • 差 EXCEPT

    # 查问后果的差集(查问1) EXCEPT (查问2)
    其实就是 查问1 和 查问2的补集 的 并集