数据库SQL

数据库数据定义

数据类型 含义
char(n),character(n) 长度为n的定长字符串
varchar(n),charactervarying(n) 最大长度为n的变长字符串
clob 字符串大对象
blob 二进制大对象
smallint 短整数(2B)
int,integet 长整数(4B)
bigint 大整数(8B)
numberic(p,d) 定点数,由p位数字(不包括符号,小数点)组成,小数点后面有d位数字
decimal(p,d),dec(p,d) 同上面NUMBERIC(p,d)
real 取决于机器精度的单精度浮点数
double precision 取决于机器精度的双精度点数
float(n) 可选精度的浮点数,精度至少为n位数字
boolean 逻辑布尔量
date 日期,包含年,月,日,格式为YYYY—MM—DD
time 时间,包含一日的时,分,秒,格式为HH:MM:SS
timestamp 时间戳类型
interval 时间间隔类型

大对象简介

1.用来存储大型数据,图片,视频,音乐
2.可用于存储二进制数据,字符数据,引用外部文件的指针的数据类型

  • 大对象的4种类型

    • BLOB数据类型

      • 1.它是用来存储二进制数据
      • 2.可以存储的最大数据量(4GB-1)*db_block_size,也就是128TB
    • CLOB数据类型

      • 1.存储字符数据
      • 2.可以存储的最大数据量(4GB-1)*db_block_size,也就是128TB
    • NCLOB数据类型

      • 1.用来存储多字节字符的数据,一般用于非英文的字符
      • 2.可以存储的最大数据量是(4GB-1)*db_block_size,也就是128TB
    • BFILE数据类型

      • 1.存储文件指针

      • 2.数据文件可以存储再数据库之外,数据库存储对该文件的引用

      • 3.其最多也可以存储4GB的数据

一些重要的SQL语句

  • SELECT - 从数据库中提取数据
  • UPDATE - 更新数据库中的数据
  • DELETE - 从数据库中删除数据
  • INSERT INTO - 向数据库中插入新数据
  • CREATE DATABASE - 创建新数据库
  • ALTER DATABASE - 修改数据库
  • CREATE TABLE - 创建新表
  • ALTER TABLE - 变更(改变)数据库表
  • DROP TABLE - 删除表
  • CREATE INDEX - 创建索引(搜索键)
  • DROP INDEX - 删除索引

SQL基本命令

建表

CREATE TABLE table_name(
column1 datatype,
column2 datatype,
column3 datatype,
.....
columnN datatype,
PRIMARY KEY( one or more columns )
);

SELECT

  • select column_name, column_name from table_name

SELECT DISTINCT

  • 有时候一个列会包含多个重复值,有时候你也是只想列出不同的值而已
  • 也就是只列出一个种类值
select distinct column_name, column_name from table_name

WHERE

  • 提取满足指定条件的记录
select column_name,column_name from table_name where column_name operator value;
  • 注意:如果是搜索字符串的话,请注意内容的大小写,这不属于数据库SQL无视大小写字母的范畴
运算符 描述
= 等于
<> 不等于。
> 大于
< 小于
>= 大于等于
<= 小于等于
between 在某个范围内
like 搜索某种模式
in 指定针对某个列的多个可能值
where子句
逻辑运算
  • And与同时满足两个条件的值 ,查询表中数值范围内的值
Select*from emp sal>1000 and sal <3000
  • 逻辑运算的优先级
() not and or
特殊条件
  • 空值判断
select * from emp where comm is null

查询表中的comm中的空值

  • between and
select * from emp where sal between 1000 and 3000

查询范围内的值

  • in
select * from emp where sal in(5000,3000,1500)

查询表中与值相同的值

  • like
select * from emp where ename like 'M%'

查询emp表中有M的值,上面为模糊信息

  • %:表示多个字值,_表示一个字符
  • M%:为能配符,正则表达式,表示的意思是为模糊查询信息为M开头的
  • %M%:查询包含M的所有内容
  • %M_:表示查询以M在倒数第二位的所有内容

    AND & OR 运算符

1.如果两个条件同时成立,则AND运算符显示一条记录
2.如果两个条件中只有一个条件成立,则OR运算符显示一条记录

AND运算符实例

表示查询出表中名字叫fuck而且性别男的信息

select * from emp where name = 'fuck' AND sex = 'man';

OR运算符实例

表示查询出表中名字叫fuck或者性别男的信息

select * from emp where name = 'fuck' OR sex = 'man'

ORDER BY 关键字

  • 用于对结果集按照一个列或者多个列进行排序
  • 默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,你可以使用DESC关键字

    语法

    在表中查询信息并且按照升序或降序排序
    select column_name,column_name from table_name order by column_name,column_name ASC|DESC

    INSERT INTO

    该语句用于插入新的记录
  1. 不用指定插入数据的列名,只需要提供被插入的信息即可
    INSERT INTO table_name values(value1,value2,value3,...)
  2. 需要指明列名以及被插入的信息
    INSERT INTO table_name(column1,column2,column3,...)
    VALUES (value1,value2,value3,...)
  3. 无需指定的多表插入
    INSERT INTO table_name values
    (value1,value2,value3),
    (value1,value2,value3),
    (value1,value2,value3),
    (value1,value2,value3);

    UPDATE语句

  • 更新表中的记录
    UPDATE table_name set column1=value1,column2=value2,...
    where some_column=some_value;
  • 实例
    update site set pre = 'kalyan';

image-20221110110519707

DELETE语句

用来删除表中的行

DELETE from table_name where some_column=some_value;

SELECT TOP,LIMIT,ROWNUM子句

1.SELECT TOP 子句用于规定要返回的记录的数目
2.SELECT TOP子句对于拥有数千条记录的大型表来说,是非常有用的
3.需要注意的是不是所有数据库系统都支持select top语句。mysql支持limit语句来选取指定的条数数据,Oracle可以使用rownum来选取

  • SQL server/MS Access语法
    select top number|percent column_name(s) from table_name LIMIT nember
  • MySQL语法
    select column_name(s) from table_name limit number
  • 实例
    select * from persons limit 5
  • Oracle语法
    select * column_name(s) from table_name where rownwm<=number

ALTER

  • ALTER TABLE语句使用与在已有表中添加,修改,删除列
  1. 添加
    ALTER TABLE table_name add column_name datatype;
  2. 删除
    ALTER TABLE table_name drop column column_name;
  3. 修改
    ALTER TABLE table_name ALTER COLUMN column_name datatype;

通配符

通配符 描述
% 替代0个或多个字符
_ 替代一个字符
[charlist] 字符列中的任何单一字符
[^charlist]或[!charlist] 不在字符列中的任何单一字符

别名

通过使用SQL,可以为表名称或者列名称修改成为你喜欢的名字
这能够让你的表格根据有阅览性

  • 列的SQL别名语法
    select column_name AS alians_name from table_name
  • 表的SQL别名语法
    select column_name(s) from table_name AS alias_name

连接(JOIN)

  • join用于把两个或者多个表结合起来。

  • 下面有相关的七种用法
    image-20221110110358365

  • inner join:如果表中有至少一个匹配,则返回行

  • left join:即使右表中没有匹配,也从左表返回所有的行

  • right join:即使左表中没有匹配,也从右表返回所有的行

  • full join:只要其中一个表中存在匹配,则返回行

SQL连接查询

  • 连接查询是关系数据表中最主要的查询,主要包括内连接,外连接以及交叉连接

  • 在关系数据库管理系统中,表建立时各数据之间的关系不一定需要确定,经常把一个实体的所有信息放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息

内连接

  • 内连接是一种最常用的连接类型。内连接查询实际上是一种任意条件的查询。使用内连接时,如果两个表的相关字段满足连接条件,就从这两个表中提取数据并组合成新的记录,也就是在内连接查询中,只有满足条件的元组才能出现在结果关系中
  • 指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。
    --例如:要查询每个已经选课的学生的情况,查询语句为
    --等值连接
    SELECT *
    FROM Student INNER JOIN SC
    ON S.Sno = SC.Sno
    --实际使用中常常省略 inner join
    SELECT * FROM Student,SC WHERE S.Sno = SC.Sno

    --自然连接
    SELECT *
    FROM Student NATURAL JOIN SC
    ON S.Sno = SC.Sno
    左连接left join
  • 即使右表中没有匹配,也从左表返回所有的行
    select * from table_name A left join table_name B on A.column_name = B.column_name; 
  • 实例
    select *from Monggo m left join site s on s.pre = m.pre;

image-20221110110450327

右连接right join
  • 原理同上

外连接

左外连接
  • 左边表数据行全部保留,右边表保留符合连接条件的行。
    双表:
    SELECT  *
    FROM TESTA
    LEFT OUTER JOIN TESTB
    ON TESTA.A=TESTB.A
    三表:
    SELECT  *
    FROM TESTA
    LEFT OUTER JOIN TESTB
    ON TESTA.A=TESTB.A
    LEFT OUTER JOIN TESTC
    ON TESTA.A=TESTC.A
    右外连接
  • 右边表数据行全部保留,左边表保留符合连接条件的行。
    SELECT  *
    FROM TESTA
    RIGHT OUTER JOIN TESTB
    ON TESTA.A=TESTB.A
    全外连接
  • 左外连接 union 右外连接。
    SELECT  * 
    FROM TESTA
    FULL OUTER JOIN TESTB
    ON TESTA.A=TESTB.A

视图

SQL CREATE VIEW语句

  • 简化数据访问,让复杂的 SQL 语句简单化。用户只需要对视图写简单的代码就能返回需要的数据,一些复杂的逻辑放在视图中完成。
  • 防止敏感的字段被选中,同时仍然提供对其它重要数据的访问。
  • 可以对视图添加一些额外的索引,来提高查询的效率。
  • 在SQL中,视图时基于SQL语句的结果集的可视化的表
  • 视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段

SQL CREATE VIEW基本格式

  • 视图显示的是最新的数据,每当用户查询视图时候,数据库引擎通过使用视图的SQL语句重建数据。
    create view view_name AS select column1,column2....
    from table_name where[condition]

视图更新

  • SQL CREATE OR REPLACE VIEW语法

    create or replace view view_name AS select column_name(s) from table_name where condition
  • 添加

    create view [current product list] AS select productID,productName,Category from products
    where discontinued=no
  • 在server上

    alter view [ schema_name . ] view_name [ ( column [ ,...n ] ) ] 
    [ WITH <view_attribute> [ ,...n ] ]
    AS select_statement
    [ WITH CHECK OPTION ] [ ; ]

    <view_attribute> ::=
    {
    [ ENCRYPTION ]
    [ SCHEMABINDING ]
    [ VIEW_METADATA ]
    }

SQL 基本函数(以下均用SQL server)

AVG()

  • 返回数组列的平均值
    server
    select AVG(column_name) from table_name
  • 实例
    server
    select AVG(count_) as '平均值' from site;

image-20221108094247557

COUNT()

  • 返回函数匹配指定条件的值得数目

    server
    select COUNT(*) from table_name
  • 实例

    server
    select count(site_id) from site where count_ < 100

image-20221108095113965

FIRST()(SQL server/TOP 1)

  • 返回指定得列中得第一个记录的值
    server
    select TOP 1 name from table_name order by column_name ASC;
  • 实例
    server
    select TOP 1 count_ from site order by count_ ASC
    server
    select TOP 1 count_ from site  where count_ > 100 order by count_ ASC;
  1. image-20221108100159623
  2. image-20221108100426725

LAST()(SQL server/TOP 1 + DESC)

  • 返回指定列中的最后一个记录的值(找TOP 1 的倒序)

    server
    select TOP 1 name from table_name order by column_name DESC;
  • 实例

    server
    select TOP 1 count_ from site where count_ <100 order by count_ DESC;

image-20221108101150100

MAX()

  • 返回指定列的最大值

    server
    select MAX(column_name)from table_name;
  • 实例

    server
    select MAX(count_) as '最大值' from site;

image-20221108102303157

MIN()

  • 返回指定列的最小值

    server
    select MIN(column_name) from table_name;
  • 实例

    server
    select MIN(count_) as '最小值' from site where count_ > 50;

image-20221108103744764

SUM()

  • 返回返回数值列的总数

    server
    select SUM(column_name) from table_name;
  • 实例

    server
    select SUM(count_) as '总数' from site;

image-20221108104354535

GROUP BY

  • 语句用于结合聚合函数(以上的基本函数就是聚合函数),根据一个或多个列队结果集进行分组
    server
    select column_name,aggregate_function(column_name) 
    from table_name
    where column_name operator value
    group by column_name;
  • 实例
    server
    select site_id,sum(count_) as '总数' from site group by site_id;

image-20221108111402398

HAVING

  • 能够与聚合函数一起使用,用于筛选分组后的各组数据
    server
    select column_name,aggregate_function(column_name) 
    from table_name
    where column_name operator value
    group by column_name;
    Having aggregate_function(column_name) operator value;
  • 实例
    server
    select site_id,sum(count_) as '总数' from site group by site_id having  sum(count) < 200;

image-20221108112038865

EXISTS

  • 判断查询子句是否有记录,如果有一条或多条记录存在返回 True,否则返回 False。

    select column_name(s) from table_name where exists (select column_name from table_name where condition);
  • 实例

    select count_ from site where exists (select count_ from site where count_ > 450);

image-20221108114028592

UCASE()(UPPER())

  • 把字段的值转为大写

    server
    select UPPER(column_name) from table_name;
  • 实例

    select upper(pre) from site;

image-20221108121304926

LCASE()/LOWER()

  • 把字段的值转换为小写

    select LOWER(column_name) from table_name;
  • 实例

    select LOWER(pre) from site ;

image-20221108122014010

MID()(并不存在SQL Server)

  • 用于文本字段中提取字符
    select MID(column_name,statr,[,length]) from table_name;

LEN()

  • 返回文本中字段的长度
    select LEN(column_name)from table_name;
  • 实例
    select LEN(pre) from site;

image-20221108122515385