sql 字段 SQL学习笔记

附上教程链接~ SQL 教程开搞!一、基础教程:基本定义分类数据操作语言 (DML) 和 数据定义语言 (DDL)。

附上教程链接~ SQL 教程

开搞!

一、基础教程:基本定义分类

数据操作语言 (DML) 和 数据定义语言 (DDL)。

查询和更新指令构成了 SQL 的 DML 部分(主要针对某个表具体内容):

SQL 中最重要的 DDL 语句(主要针对库、表、索引和关系):

语法

  1. SELECT A,B FROM 表名称
  2. SELECT * FROM 表名称
  3. SELECT DISTINCT 列名称 FROM 表名称
  4. # where条件筛选
  5. SELECT 列名称 FROM 表名称 WHERE 运算符 /'string'
  6. SELECT 列名称 FROM 表名称 WHERE 运算符 /'string' and ( 运算符 /'string' or 运算符 /'string')
  7. # order by排序筛选
  8. SELECT Company, OrderNumber FROM Orders ORDER BY Company # company是英文字母,按字母顺序
  9. SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC
  10. SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber #第二个指标代表二级筛选条件(比如有一个company有两个ordernumber,就会按number排序

into语法

插入行数据

  1. INSERT INTO 表名称 VALUES (1, 2,....) #每一个列一次赋值
  2. INSERT INTO 表名称 (1, 2,...) VALUES (1, 2,....) # 可以插入某几列指定的值,其他列保持空值

语法(行视角)

  1. # 删除某行
  2. DELETE FROM 表名称 WHERE 运算符 /'string'
  3. # 删除全部行,但索引仍保持不变
  4. DELETE FROM 表名称
  5. DELETE * FROM 表名称
  6. #列的删除用alter table

(2022.3.10 / 我好水哈哈哈,就复习了最基本的语法)

Drop 语法

  1. # 删除表:
  2. DROP TABLE 表名称
  3. # 删除数据库:
  4. DROP DATABASE 数据库名称

table 语法

只清除表内数据,不删除表本身

  1. TRUNCATE TABLE 表名称

语法

更新列数据

  1. UPDATE 表名称 SET 列名称 = 新值,列名称 = 新值 WHERE 运算符 /'string'

Alter table 语句(列视角)

  1. # 新增列
  2. ALTER TABLE table_name
  3. ADD column_name datatype;
  4. # 删除表中的列,请使用下列语法:
  5. ALTER TABLE table_name
  6. DROP COLUMN column_name;
  7. # 要改变表中列的数据类型,请使用下列语法:
  8. ALTER TABLE table_name
  9. ALTER COLUMN column_name datatype;

数据类型

详细信息见SQL 数据类型

二、高级教程Top 语法(并非所有数据库都支持)

SQL 语法:

  1. SELECT TOP number/number percent column_name FROM table_name

MySQL语法:

  1. SELECT column_name FROM table_name LIMIT number

语法:

  1. SELECT column_name FROM table_name WHERE ROWNUM <= number

Like 语法

用于在where子句中搜索列中的指定模式。

  1. SELECT column_name FROM table_name WHERE column_name LIKE pattern;
  2. #举例:以g结尾的city
  3. SELECT * FROM table_name WHERE city LIKE %g;
  4. #举例:不选包含lon的city
  5. SELECT * FROM table_name WHERE city NOT LIKE %lon%;

SQL通配符(LIKE模式使用)通配符含义

零或多个字符

一个字符

[]

字符列表中任何单一字符

[^] or [!]

不在字符列表中任何单一字符

In 语法

where子句中规定值

  1. SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...);
  2. SELECT column_name(s) FROM table_name WHERE column_name NOT IN (value1,value2,...);

语法

where子句中规定值

!!需先明确自己使用的数据库里是左开右闭还是全开等

  1. SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2;
  2. SELECT column_name(s) FROM table_name WHERE column_name NOT BETWEEN value1 AND value2;

As 语法

可以为列名和表名指定昵称(Alias),从而查找时可以简写/新建表或者视图时重新命名

  1. #对表
  2. SELECT column_name(s) FROM table_name AS alias_name
  3. #对列
  4. SELECT column_name AS alias_name FROM table_name
  5. #简写举例
  6. SELECT po.OrderID, p.LastName, p.FirstName
  7. FROM Persons AS p, Product_Orders AS po
  8. WHERE p.LastName='Adams' AND p.FirstName='John'
  9. #重命名举例
  10. SELECT LastName AS Family, FirstName AS Name FROM Persons

(后面去玩桌游了,我有罪2022.3.16)

Join 语法(列+列)

  1. SELECT table_a.column_name1,table_a.column_name2,table_b.column_name1
  2. FROM table_a # from谁,谁就是最关心的主体信息,是主键的来源;
  3. JOIN table_b ON table_a.column_name1 = table_b.column_name3;

join逻辑图Union 语法(行+行)

用于合并两个或多个 语句的结果集,要求列完全匹配

  1. SELECT column_name(s) FROM table_name1
  2. UNION
  3. SELECT column_name(s) FROM table_name2;
  4. # 如果允许重复的值
  5. SELECT column_name(s) FROM table_name1
  6. UNION ALL
  7. SELECT column_name(s) FROM table_name2;

into 语法

从一个表中选取数据插入另一个表中。常用于创建表的备份复件或者用于对记录进行存档。

某种新建表的形式。

  1. SELECT * INTO new_table_name [IN externaldatabase] FROM old_tablename;
  2. SELECT column_name(s) INTO new_table_name [IN externaldatabase] FROM old_tablename;

语法

新建数据库

  1. CREATE DATABASE database_name;

table 语法

新建表

  1. CREATE TABLE 表名称
  2. (列名称1 数据类型 约束1,
  3. 列名称2 数据类型 NOT NULL,
  4. 列名称3 数据类型 ,
  5. ....);

约束语法

约束用于限制加入表的数据的类型。

(1)可以在创建表时规定约束(通过 TABLE 语句);

(2)或者在表创建之后也可以(通过 ALTER TABLE 语句)。

我们将主要探讨以下几种约束:

!!其实这些约束也可以通过交互式方式进行设置;即通过界面选择设置。(但我目前不知道企业工作会不会唾弃这种交互式方法)

Not null 约束用法

强制约束列不接受空值(见下方例子)

约束用法

唯一标识数据库表中的每条记录( KEY 拥有自动定义的 约束。)

新建表时增加约束用法如下:

  1. # MySQL
  2. CREATE TABLE Persons
  3. (Id_P int NOT NULL,
  4. LastName varchar(255) NOT NULL,
  5. City varchar(255),
  6. UNIQUE (Id_P) #最后单独说明);
  7. # SQL Server / Oracle / MS Access
  8. CREATE TABLE Persons
  9. (Id_P int NOT NULL UNIQUE, #设定的时候就约束
  10. LastName varchar(255) NOT NULL);
  11. # 给约束命名
  12. CREATE TABLE Persons
  13. (Id_P int NOT NULL, #设定的时候就约束
  14. LastName varchar(255) NOT NULL,
  15. CONSTRAINT pk_PersonID UNIQUE (Id_P,LastName)
  16. );

如果表已被创建,但需要新加约束,使用ALTER TABLE

  1. ALTER TABLE Persons ADD UNIQUE (Id_P);

如需命名 约束,并定义多个列的 约束:

  1. ALTER TABLE Persons
  2. ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName);

撤销约束:

  1. # MySQL
  2. ALTER TABLE Persons
  3. DROP INDEX uc_PersonID;
  4. # SQL Server / Oracle / MS Access
  5. ALTER TABLE Persons
  6. DROP CONSTRAINT uc_PersonID;

key约束语法

主键,唯一标识表,不可重复,自带属性。语法多同,删除时略有不同

  1. # MySQL
  2. ALTER TABLE Persons
  3. DROP PRIMARY KEY;
  4. # SQL Server / Oracle / MS Access
  5. ALTER TABLE Persons
  6. DROP CONSTRAINT pk_PersonID;

key 约束语法

外键,某一个表中的外键指向了另一个表的主键,用于预防破坏表之间连接的动作,也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。

同 key用法相同,但是 后面都加一个引用了哪个表的主键” 表名(主键名)”,效果如下:

  1. # MySQL
  2. CREATE TABLE Orders
  3. (Id_O int NOT NULL,
  4. OrderNo int NOT NULL,
  5. Id_P int,
  6. PRIMARY KEY (Id_O),
  7. FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
  8. );

删除时不用加,和 key完全相同。

Check 约束语法

用于限制列中的值的范围。如果对单个列定义 CHECK 约束,那么该列只允许特定的值。如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。

  1. # MySQL
  2. CREATE TABLE Persons
  3. (Id_P int NOT NULL,
  4. LastName varchar(255) NOT NULL,
  5. City varchar(255),
  6. CHECK (Id_P>0) #最后单独说明);
  7. # SQL Server / Oracle / MS Access
  8. CREATE TABLE Persons
  9. (Id_P int NOT NULL CHECK (Id_P>0), #设定的时候就约束
  10. LastName varchar(255) NOT NULL);
  11. # 给约束命名
  12. CREATE TABLE Persons
  13. (Id_P int NOT NULL,
  14. City varchar(255),
  15. CONSTRAINT chk_PersonID CHECK (Id_P>0 AND City='Sandnes')
  16. );

表已创建,alter table方法同前约束;删除如下:

  1. # MySQL
  2. ALTER TABLE Persons
  3. DROP CHECK chk_Person;
  4. # SQL Server / Oracle / MS Access
  5. ALTER TABLE Persons
  6. DROP CONSTRAINT chk_Person;

约束语法

用于向列中插入默认值。如果没有规定其他的值,那么会将默认值添加到所有的新记录。后面可以跟符合列数据类型的值(数值/字符串),也可以跟函数。

  1. CREATE TABLE Persons
  2. (City varchar(255) DEFAULT 'Sandnes'
  3. );
  4. # 通过使用类似 GETDATE() 这样的函数,DEFAULT 约束也可以用于插入系统值:
  5. CREATE TABLE Orders
  6. (Id_P int,
  7. OrderDate date DEFAULT GETDATE()
  8. );

表已经存在:

sql 字段 SQL学习笔记

  1. # MySQL
  2. ALTER TABLE Persons
  3. ALTER City SET DEFAULT 'SANDNES';
  4. # SQL Server / Oracle / MS Access
  5. ALTER TABLE Persons
  6. ALTER COLUMN City SET DEFAULT 'SANDNES'

撤销 约束

  1. # MySQL
  2. ALTER TABLE Persons
  3. ALTER City DROP DEFAULT;
  4. # SQL Server / Oracle / MS Access
  5. ALTER TABLE Persons
  6. ALTER COLUMN City DROP DEFAULT

(2022.3.17 不想看了,拜拜,下次再见)

index 语法

在表中创建索引。在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。用户无法看到索引,它们只能被用来加速搜索/查询。

  1. CREATE INDEX index_name
  2. ON table_name (column_name)
  3. # 在表上创建一个唯一的索引。唯一的索引意味着两个行不能拥有相同的索引值。
  4. CREATE UNIQUE INDEX index_name
  5. ON table_name (column_name, column_name2)
  6. # 可规定索引顺序
  7. CREATE INDEX PersonIndex ON Person (LastName DESC)
  8. # 撤销索引
  9. # Access
  10. DROP INDEX index_name ON table_name
  11. # SQL Server
  12. DROP INDEX table_name.index_name
  13. # IBM DB2 Oracle 语法:
  14. DROP INDEX index_name
  15. # MySQL 的语法:
  16. ALTER TABLE table_name DROP INDEX index_name

Auto 字段(MySQL)/ 字段(SqL )

在新纪录插入表中时生成一个唯一的数字,主要用于主键序号的自动生成

  1. # "P_Id" 列定义为 auto-increment 主键,默认地,AUTO_INCREMENT 的开始值是 1,每条新记录递增 1
  2. CREATE TABLE Persons
  3. (
  4. P_Id int NOT NULL AUTO_INCREMENT,
  5. LastName varchar(255) NOT NULL,
  6. FirstName varchar(255),
  7. Address varchar(255),
  8. City varchar(255),
  9. PRIMARY KEY (P_Id)
  10. )
  11. # 规定以其他非1的值起始
  12. ALTER TABLE Persons AUTO_INCREMENT=100
  13. # SQL Server
  14. CREATE TABLE Persons
  15. (
  16. P_Id int PRIMARY KEY IDENTITY,
  17. LastName varchar(255) NOT NULL,
  18. FirstName varchar(255),
  19. Address varchar(255),
  20. City varchar(255)
  21. )
  22. # 规定以其他非1的值起始,并且以不同的递增规律增加
  23. Identity2010# 20起始,10递增

view 语法

视图是基于 SQL 语句的结果集的可视化的表。物理虚拟表,即现实不存储。包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。

  1. # 创建视图
  2. CREATE VIEW view_name AS
  3. SELECT column_name(s) FROM table_name WHERE condition
  4. # 更新的话就再创建一次
  5. # 撤销视图
  6. DROP VIEW view_name

NULL 值

用is null / is not null

在计算时,可以把null值赋值为0,否则返回也是null结果

  1. # SQL Server / MS Access
  2. ISNULL(UnitsOnOrder,0)
  3. # Oracle
  4. NVL(UnitsOnOrder,0)
  5. # MySQL
  6. IFNULL(UnitsOnOrder,0)
  7. COALESCE(UnitsOnOrder,0)

(2022.3.18 明天学完函数,后天就可以参加测验练习熟练度啦!)

三、函数

AVG()函数

返回列平均值

  1. SELECT AVG(column_name) FROM table_name

COUNT()函数

返回符合条件的行数

  1. SELECT COUNT(column_name) FROM table_name
  2. SELECT COUNT(*) FROM table_name
  3. SELECT COUNT(DISTINCT column_name) FROM table_name

FIRST()、LAST()函数

返回第一个记录的值,可先order by

  1. SELECT FIRST(column_name) FROM table_name

MAX()、MIN()函数

  1. SELECT MAX(column_name) FROM table_name

SUM()函数

返回总数(求和)

  1. SELECT SUM(column_name) FROM table_name

Group by用法

用于结合合计函数(比如sum),根据一个或多个列对结果集进行分组。

  1. SELECT column_name, aggregate_function(column_name)
  2. FROM table_name
  3. WHERE column_name operator value
  4. GROUP BY column_name

用法

增加 子句原因是:WHERE 关键字无法与合计函数一起使用。

  1. SELECT column_name, aggregate_function(column_name)
  2. FROM table_name
  3. WHERE column_name operator value
  4. GROUP BY column_name
  5. HAVING aggregate_function(column_name) operator value
  6. # 例子:查找订单总金额少于 2000 的客户。
  7. SELECT Customer,SUM(OrderPrice) FROM Orders
  8. GROUP BY Customer
  9. HAVING SUM(OrderPrice)<2000

UCASE() 、LCASE()函数

把字段的所有值转换为大、小写。

  1. SELECT UCASE(column_name) FROM table_name

MID()函数

从文本字段的所有值中提取字符。

  1. # start 必需,规定开始位置(起始值是 1
  2. # length可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。
  3. SELECT MID(column_name,start,length) FROM table_name
  4. # 例子:
  5. SELECT MID(City,1,3) as SmallCity FROM Persons

LEN()函数

返回文本字段中所有值的长度。

  1. SELECT LEN(column_name) FROM table_name
  2. # 例子
  3. SELECT LEN(City) as LengthOfCity FROM Persons

ROUND()函数

用于把数值字段舍入为指定的小数位数,为小数位。

  1. SELECT ROUND(column_name,decimals) FROM table_name

Date()函数

MySQL:

函数描述

NOW()

返回当前日期和时间

()

返回当前的日期

()

返回当前的时间

DATE()

提取日期或日期/时间表达式的日期部分

()

返回日期/时间按的单独部分

()

给日期添加指定的时间间隔

()

从日期减去指定的时间间隔

()

返回两个日期之间的天数

()

用不同的格式显示日期/时间

SQL

函数描述

()

返回当前日期和时间

()

返回日期/时间的单独部分

()

在日期中添加或减去指定的时间间隔

()

返回两个日期之间的时间

()

用不同的格式显示日期/时间

数据类型:

MySQL 使用下列数据类型在数据库中存储日期或日期/时间值:

SQL 使用下列数据类型在数据库中存储日期或日期/时间值:

()函数

设置格式

  1. SELECT FORMAT(column_name,format) FROM table_name
  2. # 例子
  3. SELECT ProductName, UnitPrice, FORMAT(Now(),'YYYY-MM-DD') as PerDate
  4. FROM Products

(咦教程学完了,怎么没出现exit用法,奇怪哦,完了再补吧 2022.3.20,还有测验也过于理论基础了)

四、补 语法

属于相关子查询,不返回数据,当查询为空值时,返回“FALSE”,非空则返回“TRUE”。

因为 返回的是真值或假值,所以他所带的子查询一般直接用' *' ,因为给出列名也没多少意义。

子查询的条件依赖于外层父查询的查个属性值。比如:

  1. select Sname
  2. from Student
  3. where exists (
  4. select *
  5. from SC
  6. where Sno=Student.Sno and Cno ='1');

所说的依赖也就是这一句“ Sno=.Sno”,是外查询。查询过程不是一般的自下而上执行,依赖于外查询,执行的时候是先从父查询中取一个元组,然后根据条件 Sno=.Sno 处理内查询,得到结果再进行父查询中取第二个元组,如果反复。

可与NOT 连用,反意思反过来理解。

实习想法和整个学习进度都被辣鸡疫情耽误了……我来早上温习一下。(2022.7.17)

CASE WHEN 语法

(from :SQL之CASE WHEN用法详解)

根据when条件查找并用then定义输出结果

  1. case
  2. when sex = '1' then '男'
  3. when sex = '2' then '女'
  4. else '其他' end

!Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。

– 比如说,下面这段sql永远无法得到“第二类”这个结果

  1. case
  2. when col_1 in ( 'a', 'b') then '第一类'
  3. when col_1 in ('a') then '第二类'
  4. else'其他' end

应用举例

  1. #分数scorescore<60返回不及格,score>=60返回及格,score>=80返回优秀
  2. SELECT STUDENT_NAME,
  3. (CASE WHEN score < 60 THEN '不及格'
  4. WHEN score >= 60 AND score < 80 THEN '及格'
  5. WHEN score >= 80 THEN '优秀'
  6. ELSE '异常' END) AS Rank
  7. FROM student
  8. #现老师要统计班中,有多少男同学,多少女同学,并统计男同学中有几人及格,女同学中有几人及格,要求用一个SQL输出结果
  9. #
  10. SELECT
  11. SUM (CASE WHEN STU_SEX = 0 THEN 1 ELSE 0 END) AS MALE_COUNT,
  12. SUM (CASE WHEN STU_SEX = 1 THEN 1 ELSE 0 END) AS FEMALE_COUNT,
  13. SUM (CASE WHEN STU_SCORE >= 60 AND STU_SEX = 0 THEN 1 ELSE 0 END) AS MALE_PASS,
  14. SUM (CASE WHEN STU_SCORE >= 60 AND STU_SEX = 1 THEN 1 ELSE 0 END) AS FEMALE_PASS
  15. FROM
  16. THTF_STUDENTS
现在最火的发帖平台

创业在大学生创业 大学生创新创业

2024-4-13 1:12:38

现在最火的发帖平台

环保日记

2024-4-13 1:12:45

个人中心
购物车
优惠劵
今日签到
私信列表
搜索