SQL

作者: 李霖弢 | 来源:发表于2019-08-02 15:30 被阅读0次

SQL Server Management Studio

SQL Server Management Studio 是一个集成环境,用于访问、配置、管理和开发 SQL Server 的所有组件。

连接到服务器

Navicat

通常用于MySql(以下基于5.7安装包)


DBMS - 数据库管理系统(Database Management System)

数据库管理系统是一种可以访问数据库中数据的计算机程序。
DBMS 使我们有能力在数据库中提取、修改或者存贮信息。


什么是SQL (Structured Query Language)

SQL(结构化查询语言),是一门 ANSI 的标准计算机语言,用来访问和操作数据库系统。
SQL可作用于RDBMS(关系型数据库服务系统),如 My SQL, SQL Server等。不同的 SQL 数据库程序拥有SQL 标准之外的私有扩展!


表是相关数据条目的集合,它由许多列和行组成。其中列又称为字段,行又称为一条记录


常用数据类型

  • 数字 int float
  • 日期和时间 datetime date time
  • 字符串
    char 定长 最长8000个字符
    varchar 不定长 最长8000个字符
    text 不定长 最长2,147,483,647个字符
  • 二进制 binary varbinary image

SQL语法介绍

  1. SQL 对大小写不敏感!
  2. SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,则不要使用引号。

可以把 SQL 分为两个部分:数据操作语言 (DML)数据定义语言 (DDL)

数据操作语言 (DML)

SELECT 查询
  • 从表中找出指定列或所有列
SELECT 列名称1,列名称2 FROM 表名称
SELECT * FROM 表名称
  • 去重 DISTINCT
SELECT DISTINCT 列名称 FROM 表名称
  • 条件 WHERE (配合条件运算符使用)
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
SELECT * FROM 表名称 WHERE 列 LIKE '%lond%' //查询所有N开头的列
SELECT * FROM 表名称 WHERE 列 NOT IN ('Adams','Carter')
SELECT * FROM 表名称 WHERE 列 NOT BETWEEN 1 AND 5
条件运算符 功能
= 等于
<> 或 != 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
NOT 配合BETWEEN,IN,LIKE等使用
BETWEEN 在某个范围内
EXISTS 存在
UNIQUE 无重复项
IN 允许查询多个值
LIKE 配合通配符搜索某种模式(类似正则)
通配符 % 替代一个或多个字符
通配符 _ 仅替代一个字符
通配符 [ABC] 字符列中的任何单一字符
通配符 [^ABC] 不在字符列中的任何单一字符
  • AND 和 OR 运算符
SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'
SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter'
SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William')
AND LastName='Carter'
  • ORDER BY 排序
    默认为升序排列,需要降序时使用DESC
SELECT * FROM Persons ORDER BY Age DESC, Name ASC
  • TOP 数量
SELECT TOP number (percent) 列名称 FROM 表名称
  • AS 别名
SELECT 列名称 AS 别名 FROM 表名称
SELECT 列名称 FROM 表名称 AS 别名 
SELECT po.OrderID, p.Name FROM Persons AS p, Product_Orders AS po WHERE p.Name=po.OwnerName
//会互相遍历拼接两张表的内容
  • JOIN
    用于根据两个或多个表中的列之间的关系,从这些表中查询数据。
SELECT po.OrderID, p.Name FROM Persons AS p JOIN Product_Orders AS po ON p.Name = po.OwnerName
  • INNER JOIN 等价于JOIN

  • LEFT JOIN 左表的行即使未能匹配成功,也会全部显示

  • RIGHT JOIN 右表的行即使未能匹配成功,也会全部显示

  • FULL JOIN 两表内容不管能否匹配成功,都会全部展示。成功匹配的会出现在同一行内。

  • UNION 和 UNION ALL
    将多个表的结果合并到同个列中显示(各语句的列数必须相同)
    UNION会自动去重,UNION ALL则显示所有

SELECT 列1(s) FROM 表1
UNION
SELECT 列2(s) FROM 表2
  • SELECT INTO
    用于复制并创建新表。
SELECT 列名
INTO 新表名 (IN 其他数据库名) 
FROM 旧表名
  • 内置函数表达式
    如:avg()sum()count()
SELECT COUNT(*) AS "total_rows" FROM employees;
+------------+
| total_rows |
+------------+
|         40 |
+------------+
1 row in set
  • 日期表达式
    返回当前系统日期和时间值
SELECT CURRENT_TIMESTAMP;
//或 SELECT  GETDATE();
+---------------------+
| CURRENT_TIMESTAMP   |
+---------------------+
| 2019-01-15 09:11:05 |
+---------------------+

INSERT 新增
  • 向表中(指定列)插入一条新数据
    未指定列时即为所有列依次填入数据(除id外)
INSERT INTO 表 VALUES (值1, 值2,....)
INSERT INTO 表 (列1, 列2,...) VALUES (值1, 值2,....)
Update 修改
  • 更新数据
UPDATE 表 SET 列 = 新值 WHERE 列 = 某值
UPDATE Person SET Address = 'Zhongshan', City = 'Nanjing' WHERE LastName = 'Wilson'
Delete 删除
  • 删除语句
    不写where则删除表中所有行
DELETE FROM 表名称 WHERE 列名称 = 值
DELETE FROM table_name

数据定义语言 (DDL)

CREATE DATABASE 创建数据库。

CREATE DATABASE 新数据库名

CREATE TABLE 创建数据库中的表。

CREATE TABLE courses (
    course_id INT AUTO_INCREMENT PRIMARY KEY,
    course_name VARCHAR(50) NOT NULL
);
CREATE TABLE trainings (
    employee_id INT,
    course_id INT,
    taken_date DATE,
    PRIMARY KEY (employee_id , course_id)//联合主键
);

ALTER TABLE

在已有的表中添加、修改或删除列。

ALTER TABLE 表名 ADD COLUMN 列名 数据类型
ALTER TABLE 表名 DROP COLUMN 列名
ALTER TABLE 表名 MODIFY COLUMN 列名 数据类型
常用数据类型
  • char(n) 固定长度字符串
  • varchar(size) 可变长度字符串
  • date 日期 精确到天
  • datetime2 日期 精确到100纳秒
  • bit 相当于布尔值(0 1 null)
  • int 整数
SQL约束

用于限制加入表的数据的类型。可以在CREATE TABLEALERT TABLE时进行设置,拼接在数据类型之后。

  • NOT NULL 禁止为null
  • UNIQUE 每条记录必须唯一
  • CHECK 用于限制列中的值的范围。
  • DEFfULT 用于向列中插入默认值
  • PRIMARY KEY 主键,每个表有且仅有一个主键,且主键值不能包含NULL
  • FOREIGN KEY 外键,指向另一个表中的主键
CREATE TABLE Orders
(
  Id_O int NOT NULL PRIMARY KEY,
  OrderNo int NOT NULL CHECK (OrderNo>0),
  City varchar(255) DEFAULT 'Sandnes',
  Id_P int FOREIGN KEY REFERENCES Persons(Id_P)
)
  • CREATE INDEX 或 CREATE UNIQUE INDEX
    用于在表内创建(唯一的)索引
    用户无法看到索引,它们只能被用来加速搜索/查询。
    更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。
CREATE INDEX 索引名 ON 表名 (列名(s)) 

DROP

删除索引/表/库

DROP TABLE 表名称
DROP DATABASE 数据库名称
TRUNCATE TABLE 表名称//只删内容不删表本身

IDENTITY / AUTO_INCREMENT

每条新增记录会自动获得递增的该值。通常为主键设置该值。
默认地,IDENTITY 的开始值是 1,每条新记录递增 1。
要规定 "P_Id" 列以 20 起始且递增 10,可以把 IDENTITY 改为 IDENTITY(20,10)

CREATE TABLE Persons
(
P_Id int PRIMARY KEY IDENTITY,
LastName varchar(255) NOT NULL
)

其他

  • VIEW 视图是可视化的表
  • Date 具有一些内置的函数,不过一般用类似 >'2019-09-06 00:00:00' 的语法即可
  • NULL
    未赋值的可选列中的记录会以NULL值保存。
    无法使用比较运算符来测试 NULL 值,必须使用 IS NULLIS NOT NULL 操作符。
  • ISNULL函数
    为了在计算中防止null值影响计算,通过该函数可以在值为null时用指定值进行替换计算
SELECT UnitPrice*ISNULL(UnitsNumber,0) FROM Products

SQL函数

SQL 拥有很多可用于计数和计算的内建函数。内建 SQL 函数的语法是:

SELECT 函数名(列) FROM 表

  • AVG
    返回数值列的平均值。NULL 值不包括在计算中。
  • COUNT
    返回匹配指定条件的行数。
  • FIRST
    返回指定的字段中第一个记录的值。
  • LAST
    返回指定的字段中最后一个记录的值。
  • MAX
    返回一列中的最大值。NULL 值不包括在计算中。
  • MIN
    返回一列中的最小值。NULL 值不包括在计算中。
  • SUM
    返回数值列的总数。
  • GROUP BY
    结合SUM函数,根据一个或多个列对结果集进行分组。
    例:分别输出每个Customer的OrderPrice之和
SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer
  • HAVING
    WHERE 关键字后无法跟SUM函数,因此需要用 HAVING 代替 WHERE。
    例:找出OrderPrice之和少于2000的Customer
SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer
HAVING SUM(OrderPrice)<2000
  • UCASE
    把字段的值转换为大写。
  • LCASE
    把字段的值转换为小写。
  • MID
    用于从文本字段中提取字符。
SELECT MID(列名,开始位置[,截取长度,不填则到底]) FROM table_name
  • LEN
    返回文本值的长度。
  • ROUND
    用于把数值字段舍入为指定的小数位数。
SELECT ROUND(列名,小数位数) FROM table_name
  • NOW / GETDATE()
    返回当前的日期和时间。
  • FORMAT
    对字段的显示进行格式化。
SELECT FORMAT(column_name,format) FROM table_name
SELECT ProductName, UnitPrice, FORMAT(GETDATE(),'yyyy-MM-dd hh:mm:ss') as PerDate
FROM Products

相关文章

网友评论

      本文标题:SQL

      本文链接:https://www.haomeiwen.com/subject/cwokdctx.html