数据库基本操作学习笔记
数据库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( |
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的值,上面为模糊信息
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
该语句用于插入新的记录
- 不用指定插入数据的列名,只需要提供被插入的信息即可
INSERT INTO table_name values(value1,value2,value3,...)
- 需要指明列名以及被插入的信息
INSERT INTO table_name(column1,column2,column3,...)
VALUES (value1,value2,value3,...) - 无需指定的多表插入
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';
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语句使用与在已有表中添加,修改,删除列
- 添加
ALTER TABLE table_name add column_name datatype;
- 删除
ALTER TABLE table_name drop column column_name;
- 修改
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用于把两个或者多个表结合起来。
下面有相关的七种用法
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;
右连接right join
- 原理同上
外连接
左外连接
- 左边表数据行全部保留,右边表保留符合连接条件的行。
双表:三表:SELECT *
FROM TESTA
LEFT OUTER JOIN TESTB
ON TESTA.A=TESTB.ASELECT *
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;
COUNT()
返回函数匹配指定条件的值得数目
server select COUNT(*) from table_name
实例
server select count(site_id) from site where count_ < 100
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;
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;
MAX()
返回指定列的最大值
server select MAX(column_name)from table_name;
实例
server select MAX(count_) as '最大值' from site;
MIN()
返回指定列的最小值
server select MIN(column_name) from table_name;
实例
server select MIN(count_) as '最小值' from site where count_ > 50;
SUM()
返回返回数值列的总数
server select SUM(column_name) from table_name;
实例
server select SUM(count_) as '总数' from site;
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;
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;
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);
UCASE()(UPPER())
把字段的值转为大写
server select UPPER(column_name) from table_name;
实例
select upper(pre) from site;
LCASE()/LOWER()
把字段的值转换为小写
select LOWER(column_name) from table_name;
实例
select LOWER(pre) from site ;
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;