东篱野鹤

导航

SQL 基础知识梳理(一)- 数据库与 SQL(转)

 

目录

 

一、What's 数据库

  1.数据库(Database,DB):将大量数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合。如:大型-银行存储的信息,小型-电话簿。

  2.数据库管理系统(Batabase Management System,DBMS):用来管理数据库的计算机系统。

  3.关系型数据库(Relational Database,RDB):目前应用最广泛的数据库。

  4.结构化查询语言(Structured Query Language,SQL):专门用于操作 RDB。

  5.常见的 5 种关系型数据库管理系统(Relational Database Management System,RDBMS):

    ①Oracle Database:甲骨文公司

    ②SQL Server:微软公司

    ③DB2:IBM 公司

    ④PostgreSQL:开源

    ⑤MySQL:开源

 

二、数据库结构

  1.服务器:用于接收并处理其它程序发出的请求的程序(软件),或者是安装此类程序的设备(计算机)。

  2.客户端:向服务器发出请求的程序(软件),或者是安装此类程序的设备(计算机)。

 

  3.(table):类似 Excel,由行和列组成的二维表。

  4.字段:表的列(垂直方向)。

  5.记录:表的行(水平方向)。【注意】关系数据库必须以行为单位进行数据读写。

  6.单元格:行列交汇处。【注意】与 Excel 不同,一个单元格只能输入一个数据。

 

三、SQL 概要

  1.SQL 语句:用关键字、表名和列名等组合而成的一条语句。

  2.3 种 SQL 语句种类

    (1)DDL(Data Definition Language,数据定义语言):创建、删除或修改数据库以及数据库中的表等对象。

      ①CREATE:创建数据库和表等对象

      ②DROP:删除数据库和表等对象

      ③ALTER:修改数据库和表等对象

    (2)DML(Data Manipulation Language,数据操作语言):查询或修改表中的记录。

      ①SELECT:查询表中的数据

      ②INSERT:向表中插入数据

      ③UPDATE:修改表中的数据

      ④DELETE:删除表中的数据

    (3)DCL(Data Control Language,数据控制语言):确认或取消对数据库中的数据变更的执行操作,以及对用户的操作数据库中的对象权限进行设定。

      ①COMMIT:确认对数据库中的数据进行的变更

      ②ROLLBACK:取消对数据库中的数据进行的变更

      ③GRANT:赋予用户的操作权限

      ④REVOKE:取消用户的操作权限

    【备注】DML 使用最频繁。

  3.SQL 语句书写规范

    ①以分号(;)结尾;

    ②大小写不敏感,不区分关键字的大小写;【注意】插入到表中的数据是区分大小写的,如“HI”、“Hi”和“hi”都不同。

    ③该系列随笔将采用“关键字大写,表名和列名的首字母大写”的格式。

    ④单词使用半角空格或换行符隔开

  4.常数的书写方式

    字符串、日期:用单引号括起来('),如'Hello','2016-09-24'。

    数字:直接书写,不用加单引号,如:5。

  

四、创建数据库与表

  1.数据库创建:

-- 语法:CREATE DATABASE <数据库名称>
CREATE DATABASE Shop -- 创建名为 Shop 的数据库

 

  

  2.表的创建

复制代码
-- 语法:
-- CREATE TABLE <表名>
-- (
--        <列名1> <数据类型> <约束>,
--        <列名1> <数据类型> <约束>,
--        ...
--        <表约束1>,
--        <表约束2>,
--        ...
-- )
复制代码
复制代码
-- 创建名为 Shohin 的表
CREATE TABLE Shohin
(
    shohin_id     CHAR(4)      NOT NULL,
    shohin_mei    VARCHAR(100) NOT NULL,
    shohin_bunrui VARCHAR(32)  NOT NULL,
    hanbai_tanka  INTEGER ,
    shiire_tanka  INTEGER ,
    torokubi      DATE ,
    PRIMARY KEY (shohin_id)
 );
复制代码

   

  3.命名规则

    ①只能使用半角英文字母、数字、下划线(_)作为数据库、表和列的名称;

    ②规范要求命名以半角英文字符开头;

    ③名称不能重复。

  4.数据类型的指定:声明该列的数据类型,是一种约束。

  5.数据类型介绍

    ①INTEGER:整型,意味不能存储小数;

    ②CHAR:字符串型,如 CHAR(10)和 CHAR(100)中的括号表名该列可以存储的字符串的最大长度。它是“定长字符串”,如 CHAR(8) 表示在列中插入 'abc' 时会自动保存成 'abc     '(后面5个半角空格)的形式;

    ③VARCHAR:字符串型,类似 CHAR,不同的是它是 “可变长字符串”,如 VARCHAR(8) 在插入 'abc',保存的就是字符串 'abc';

    ④DATE:日期类型;

    ... ...

  6.约束

    ①非空约束:NULL 是空白(无记录)的意思的关键字,NOT NULL 表示必须输入的约束。

    ②主键约束:主键是可以确定一行数据的列,一般通过它取特定行的数据,它是唯一的,不允许重复。

    ... ...

 

五、删除和更新表

  1.删除表

-- 语法:DROP TABLE <表名>
DROP TABLE Shohin; -- 删除名为 Shohin 的表

  【注意】被删的表,无法恢复。

  2.更新表

    (1)添加列

-- 语法:ALTER TABLE <表名> ADD <列名> <类型>;
ALTER TABLE Shohin ADD Shohin_mei_Kana VARCHAR(100); -- 在 Shohin 中添加名为 Shohin_mei_Kana 类型为 VARCHAR(100) 的列

    (2)删除列

-- 语法:ALTER TABLE <表名> DROP COLUMN <列名>;
ALTER TABLE Shohin DROP COLUMN Shohin_mei_Kana; -- 删除 Shohin 表中名为 Shohin_mei_Kana 的列

  【注意】表定义变更后无法恢复。

 

SQL用法1.SELECT DISTINCT:去重SELECT DISTINCT:用于查询表中其唯一不同的值,其用法和SELECET 用法一样。
2.AND和OR运算符如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。(和Java中“&&”差不多)如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。(和Java中“||”差不多)在WHERE后面使用,可以组合使用如:SELECT * FROM 表名 WHERE 条件1 AND (条件2 OR 条件2)
3.ORDER BY:排序ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字
单列就算了,多列如下:SELECT * FROM 表名 ORDER BY 字段1 DESC,字段2;124.INSERT INTO:插入INSERT INTO 语句用于向表中插入新记录两种用法如下:
第一种形式无需指定要插入数据的列名,只需提供被插入的值即可(数据列表要一一对应)INSERT INTO table_nameVALUES (value1,value2,value3,...);123第二种形式需要指定列名及被插入的值INSERT INTO table_name (column1,column2,column3,...)VALUES (value1,value2,value3,...);1235.LIKE模糊查询LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式
通配符
通配符描述%替代零个或多个字符_替代一个字符[ charlist]字符列中的任何单一字符[^ charlist] 或 [! charlist]不在字符列中的任何单一字符例:1.选取 name 以 "G"、"F" 或 "s" 开始的所有信息:SELECT * FROM table_name WHERE name REGEXP '^[GFs]‘; 2.name 以 A 到 H 字母开头的信息:SELECT * FROM table_name WHERE name REGEXP '^[A-H]'; 3.选取 name 不以 A 到 H 字母开头的网站:SELECT * FROM table_name WHERE name REGEXP '^[^A-H]';
SELECT 字段名FROM 表名WHERE 字段名 LIKE 模糊条件;1236.IN(value1,value2…)和BETWEEN ANDIN 操作符允许您在 WHERE 子句中规定多个值
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
IN 与 = 的异同相同点:均在WHERE中使用作为筛选条件之一、均是等于的含义不同点:IN可以规定多个值,等于规定一个值
JOIN(连接查询)join 用于把来自两个或多个表的行结合起来下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法

INNER JOIN(内连接)INNER JOIN 关键字在表中存在至少一个匹配时返回行。(INNER 可省略)
SELECT column_name(s)FROM table1INNER JOIN table2ON table1.column_name=table2.column_name;1234OUTER JOIN(外连接)OUTER JOIN分为LETF OUTER JOIN和RIGHT OUTER JOINOUTER JOIN 关键字从其中一表(table1)中返回所有的行,即使另一个表(table2)中没有匹配。如果左(右)表中没有匹配,则结果为 NULL。(OUTER可省略)
SELECT column_name(s)FROM table1LEFT/RIGHT OUTER JOIN table2ON table1.column_name=table2.column_name;12347.INSERT INTO SELECT(复制表数据)INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。目标表中任何已存在的行都不会受影响。
一个表中复制所有的列插入到另一个已存在的表中:INSERT INTO table2SELECT * FROM table1;
只复制希望的列插入到另一个已存在的表中:INSERT INTO table2(column_name(s))SELECT column_name(s)FROM table1;123456789

8.SQL约束(Constraints)NOT NULL - 指示某列不能存储 NULL 值。UNIQUE - 保证某列的每行必须有唯一的值。PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。CHECK - 保证列中的值符合指定的条件。DEFAULT - 规定没有给列赋值时的默认值。9.CREATE INDEX(创建索引)和DROP INDEX(删除索引)CREATE INDEX 语句用于在表中创建索引。在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。
创建一个简单的索引。允许使用重复的值:CREATE INDEX index_nameON table_name (column_name);
创建一个唯一的索引。不允许使用重复的值:唯一的索引意味着两个行不能拥有相同的索引值.CREATE UNIQUE INDEX index_nameON table_name (column_name);
DROP TABLE用法:MySQL:ALTER TABLE table_name DROP INDEX index_name;DB2/Oracle:DROP INDEX index_name;1234567891011121310.ALTER TABLE(修改表)ALTER TABLE 语句用于在已有的表中添加、删除或修改列。
在表中添加列:ALTER TABLE table_nameADD column_name datatype;
删除表中的列:ALTER TABLE table_nameDROP COLUMN column_name;
改变表中列的数据类型:ALTER TABLE table_nameMODIFY COLUMN column_name datatype;1234567891011视图视图是基于 SQL 语句的结果集的可视化的表。视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。
您可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,也可以呈现数据,就像这些数据来自于某个单一的表一样
创建视图CREATE VIEW view_name ASSELECT column_name(s)FROM table_nameWHERE condition;视图总是显示最新的数据!每当用户查询视图时,数据库引擎通过使用视图的 SQL 语句重建数据
更新视图CREATE OR REPLACE VIEW view_name ASSELECT column_name(s)FROM table_nameWHERE condition;
查询视图SELECT * FROM view_name;
删除视图DROP VIEW view_name;1234567891011121314151617函数Aggregate函数Aggregate 函数计算从列中取得的值,返回一个单一的值。
AVG()----返回平均值COUNT()----返回行数FIRST()----返回第一个记录的值LAST()----返回最后一个记录的值MAX()----返回最大值MIN()----返回最小值SUM()----返回总和Scalar函数Scalar 函数基于输入值,返回一个单一的值。
UCASE() ---- 将某个字段转换为大写LCASE() ----将某个字段转换为小写MID() ---- 从某个文本字段提取字符,MySql 中使用SubString(字段,1,end) ---- 从某个文本字段提取字符LEN() ---- 返回某个文本字段的长度ROUND() ---- 对某个数值字段进行指定小数位数的四舍五入NOW() ---- 返回当前的系统日期和时间FORMAT() ---- 格式化某个字段的显示方式Date函数NOW()----返回当前的日期和时间CURDATE()----返回当前的日期CURTIME()----返回当前的日期DATE()----提取日期或日期/时间表达式的日期部分EXTRACT()----返回日期/时间的单独部分DATE_ADD()----向日期添加指定的时间间隔DATE_SUB()----从日期中减去指定的时间间隔DATEDIFF()----返回两个日期之前的天数DATE_FORMAT()----用不同的格式显示日期/时间————————————————版权声明:本文为CSDN博主「珠箔飘灯」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/qq_40205921/article/details/108057192

posted on 2021-06-24 15:20  东篱野鹤  阅读(195)  评论(0)    收藏  举报