卖不甜枣 发表于 2024-7-23 04:28:17

SQL基础(2),程序人生

ALTER TABLE Persons
ADD UNIQUE (P_Id)

3)已创建的表中删除unique束缚
ALTER TABLE Persons
DROP INDEX uc_PersonID

3)primary key 束缚

作用:


[*]PRIMARY KEY 束缚唯一标识数据库表中的每条记录。
[*]主键必须包含唯一的值。
[*]主键列不能包含 NULL 值。
[*]每个表都应该有一个主键,并且每个表只能有一个主键。
实例:
1)创建表时添加primary key 束缚:
--mysql
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)
--SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
P_Id int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

2)已创建的表添加primary key 束缚
ALTER TABLE Persons
ADD PRIMARY KEY (P_Id)

3)已创建的表中删除primary key 束缚
ALTER TABLE Persons
DROP PRIMARY KEY

4)foreign key 束缚

作用:


[*]一个表中的 FOREIGN KEY 指向另一个表中的 UNIQUE KEY(唯一束缚的键)。
[*]FOREIGN KEY 束缚用于预防破坏表之间连接的行为。
[*]FOREIGN KEY 束缚也能防止非法数据插入外键列,由于它必须是它指向的那个表中的值之一。
实例:
“Persons” 表:
P_IdLastNameFirstNameAddressCity1HansenOlaTimoteivn 10Sandnes2SvendsonToveBorgvn 23Sandnes3PettersenKariStorgt 20Stavanger “Orders” 表:
O_IdOrderNoP_Id1778953244678332245624245621

[*]“Orders” 表中的 “P_Id” 列指向 “Persons” 表中的 “P_Id” 列。
[*]“Persons” 表中的 “P_Id” 列是 “Persons” 表中的 PRIMARY KEY。
[*]“Orders” 表中的 “P_Id” 列是 “Orders” 表中的 FOREIGN KEY。
1)创建表时添加foreign key 束缚:
--mysql
CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
)
--SQL Server / Oracle / MS Access:
CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)

2)已创建的表添加foreign key 束缚
ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

3)已创建的表中删除foreign key 束缚
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders

5)check 束缚

作用:


[*]CHECK 束缚用于限制列中的值的范围。
[*]如果对单个列定义 CHECK 束缚,那么该列只答应特定的值。
[*]如果对一个表定义 CHECK 束缚,那么此束缚会基于行中其他列的值在特定的列中对值进行限制。
实例:
1)创建表时添加check 束缚:
--mysql
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (P_Id>0)
)
--SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
P_Id int NOT NULL CHECK (P_Id>0),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

2)已创建的表添加check 束缚
ALTER TABLE Persons
ADD CHECK (P_Id>0)

3)已创建的表中删除check 束缚
ALTER TABLE Persons
DROP CHECK chk_Person

6)default 束缚

作用:


[*]DEFAULT 束缚用于向列中插入默认值。
[*]如果没有规定其他的值,那么会将默认值添加到全部的新记录。
实例:
1)创建表时添加default 束缚:
CREATE TABLE Persons
(
    P_Id int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255) DEFAULT 'Sandnes'
)

2)已创建的表添加default 束缚
ALTER TABLE Persons
ALTER City SET DEFAULT 'SANDNES'

3)已创建的表中删除default 束缚
ALTER TABLE Persons
ALTER City DROP DEFAULT

14.create index 语句

作用:


[*]CREATE INDEX 语句用于在表中创建索引。
[*]在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。
[*]可以在表中创建索引,以便更加快速高效地查询数据。
[*]用户无法看到索引,它们只能被用来加快搜索/查询。
语法:
--在表上创建一个简单的索引。允许使用重复的值:
CREATE INDEX index_name
ON table_name (column_name)
--在表上创建一个唯一的索引。不允许使用重复的值
CREATE UNIQUE INDEX index_name
ON table_name (column_name)

实例:
1)在 “Persons” 表的 “LastName” 列上创建一个名为 “PIndex” 的索引:
CREATE INDEX PIndex
ON Persons (LastName)

2)如果您希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开:
CREATE INDEX PIndex
ON Persons (LastName, FirstName)

15.SQL drop

作用:


[*]通过利用 DROP 语句,可以轻松地删除索引、表和数据库。
语法:
-----DROP INDEX 语句用于删除表中的索引。
--MS Access
DROP INDEX index_name ON table_name
--DB2/Oracle
DROP INDEX index_name
-- MS SQL Server
DROP INDEX table_name.index_name
--MySQL
ALTER TABLE table_name DROP INDEX index_name
----DROP TABLE 语句用于删除表。
DROP TABLE table_name
----DROP DATABASE 语句用于删除数据库。
--DROP DATABASE database_name
----只删除表中的数据,不删除表本身
TRUNCATE TABLE table_name

16.SQL alter table 语句

作用:


[*]ALTER TABLE 语句用于在已有的表中添加、删除或修改列
语法:
--在表中添加列
ALTER TABLE table_name
ADD column_name datatype
--删除表中的列
ALTER TABLE table_name
DROP COLUMN column_name
--改变表中列的数据类型
ALTER TABLE table_name
MODIFY COLUMN column_name datatype

17.SQL auto increment 字段

作用:


[*]Auto-increment 会在新记录插入表中时天生一个唯一的数字。
[*]通常希望在每次插入新记录时,主动地创建主键字段的值
语法:
--MySQL
CREATE TABLE Persons
(
ID int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (ID)
)
--SQL Server
CREATE TABLE Persons
(
ID int IDENTITY(1,1) PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
--Access
CREATE TABLE Persons
(
ID Integer PRIMARY KEY AUTOINCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
--Oracle
CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10

18.SQL 视图

作用:


[*]视图是基于 SQL 语句的效果集的可视化的表。
[*]视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。
[*]以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,也可以呈现数据,就像这些数据来自于某个单一的表一样。
语法:
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
---注释:视图总是显示最新的数据!每当用户查询视图时,数据库引擎通过使用视图的 SQL 语句重建数据。

实例:
1)视图 “Current Product List” 会从 “Products” 表列出全部正在利用的产品(未停产的产品)。
--创建视图
CREATE VIEW AS
SELECT ProductsID,ProductName
FROM Products
WHERE Discontinued=No
---查询视图
SELECT * FROM

2)更新视图:
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

3)删除视图
DROP VIEW view_name

19.SQL null值

作用:


[*]NULL 值代表遗漏的未知数据。
[*]默认地,表的列可以存放 NULL 值。
[*]如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录。这意味着该字段将以 NULL 值保存。
[*]NULL 值的处理方式与其他值不同。
[*]NULL 用作未知的或不实用的值的占位符。
[*]无法比较 NULL 和 0;它们是不等价的。
如何测试 NULL 值


[*]无法利用比较运算符来测试 NULL 值,好比 =、< 或 <>。
[*]必须利用 IS NULL 和 IS NOT NULL 操作符来测试null
实例:
1)选取在 “Address” 列中带有 NULL 值的记录:
SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NULL

2)选取在 “Address” 列中不带有 NULL 值的记录
SELECT LastName,FirstName,Address FROM Persons
WHERE Address IS NOT NULL

第三章 SQL函数

https://img-blog.csdnimg.cn/img_convert/f23772faf5cd79a0d8984d5c8d6d81d0.png
第一节 SQL date 函数

SQL Date 数据类型

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


[*]DATE - 格式:YYYY-MM-DD
[*]DATETIME - 格式:YYYY-MM-DD HH:MM:SS
[*]TIMESTAMP - 格式:YYYY-MM-DD HH:MM:SS
[*]YEAR - 格式:YYYY 或 YY
SQL Server 利用下列数据类型在数据库中存储日期或日期/时间值:


[*]DATE - 格式:YYYY-MM-DD
[*]DATETIME - 格式:YYYY-MM-DD HH:MM:SS
[*]SMALLDATETIME - 格式:YYYY-MM-DD HH:MM:SS
[*]TIMESTAMP - 格式:唯一的数字
MySQL Date 函数

下面的表格列出了 MySQL 中最重要的内建日期函数:
函数描述NOW()返回当前的日期和时间CURDATE()返回当前的日期CURTIME()返回当前的时间DATE()提取日期或日期/时间表达式的日期部分EXTRACT()返回日期/时间的单独部分DATE_ADD()向日期添加指定的时间间隔DATE_SUB()从日期减去指定的时间间隔DATEDIFF()返回两个日期之间的天数DATE_FORMAT()用不同的格式显示日期/时间 SQL Server Date 函数

下面的表格列出了 SQL Server 中最重要的内建日期函数:
函数描述GETDATE()返回当前的日期和时间DATEPART()返回日期/时间的单独部分DATEADD()在日期中添加或减去指定的时间间隔DATEDIFF()返回两个日期之间的时间CONVERT()用不同的格式显示日期/时间 第二节 SQL null 函数

--SQL Server / MS Access
SELECT ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products
--Oracle 没有 ISNULL() 函数。不过,我们可以使用 NVL() 函数达到相同的结果:
SELECT ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0))
FROM Products
--Mysql
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
-或
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products

第三节 aggregate 函数

1.AVG() - 返回平均值

作用:


[*]AVG() 函数返回数值列的平均值。
语法:
SELECT AVG(column_name) FROM table_name

演示:
1)从 “access_log” 表的 “count” 列获取平均值:
https://img-blog.csdnimg.cn/img_convert/e99e79b32d0054731f7152f8d94223f1.png
2)选择访问量高于平均访问量的 “site_id” 和 “count”:
https://img-blog.csdnimg.cn/img_convert/9dac4be9193840f9b5f61718adc4af42.png
2.COUNT() - 返回行数

作用:


[*]COUNT() 函数返回匹配指定条件的行数。
语法:
--返回指定列的值的数目(NULL 不计入)
SELECT COUNT(column_name) FROM table_name;
--返回表中的记录数
SELECT COUNT(*) FROM table_name;
--返回指定列的不同值的数目:
SELECT COUNT(DISTINCT column_name) FROM table_name;

演示:
1)计算 “access_log” 表中 “site_id”=3 的总访问量:
https://img-blog.csdnimg.cn/img_convert/0825e695423e892b97c6ae041ddef621.png
2)计算 “access_log” 表中总记录数:
https://img-blog.csdnimg.cn/img_convert/42ab9588722f3e6dda42dd0a811e15d7.png
3)计算 “access_log” 表中不同 site_id 的记录数:
https://img-blog.csdnimg.cn/img_convert/5c9b14080bbd8840d485a53122bba5e1.png
3.FIRST() - 返回第一个记录的值

作用:


[*]FIRST() 函数返回指定的列中第一个记录的值。
语法:
--只有 MS Access 支持 FIRST() 函数。
SELECT FIRST(column_name) FROM table_name;
--SQL Server
SELECT TOP 1 column_name FROM table_name
ORDER BY column_name ASC;
--MySQL
SELECT column_name FROM table_name
ORDER BY column_name ASC
LIMIT 1;
--Oracle
SELECT column_name FROM table_name
ORDER BY column_name ASC
WHERE ROWNUM <=1;

演示:
1)选取 “Websites” 表的 “name” 列中第一个记录的值:
https://img-blog.csdnimg.cn/img_convert/ac01a717b4423bce883768742ccf3b2b.png
4.LAST() - 返回末了一个记录的值

作用:


[*]LAST() 函数返回指定的列中末了一个记录的值。
语法:
--MS Access 支持 LAST() 函数。
SELECT LAST(column_name) FROM table_name;
--SQL Server
SELECT TOP 1 column_name FROM table_name
ORDER BY column_name DESC;
--MySQL
SELECT column_name FROM table_name
ORDER BY column_name DESC
LIMIT 1;
--Oracle
SELECT column_name FROM table_name
ORDER BY column_name DESC
WHERE ROWNUM <=1;

演示:
1)选取 “Websites” 表的 “name” 列中末了一个记录的值:
https://img-blog.csdnimg.cn/img_convert/c0f163814277dc1bfae271a1a73e3c16.png
5.MAX() - 返回最大值

作用:


[*]MAX() 函数返回指定列的最大值。
语法:
SELECT MAX(column_name) FROM table_name;

演示:
1)从 “Websites” 表的 “alexa” 列获取最大值:
https://img-blog.csdnimg.cn/img_convert/0c3403333888f8a20f5fd9fa58e298df.png
6.MIN() - 返回最小值

作用:


[*]MIN() 函数返回指定列的最小值。
语法:
SELECT MIN(column_name) FROM table_name;

演示:
1)从 “Websites” 表的 “alexa” 列获取最小值:
https://img-blog.csdnimg.cn/img_convert/de990905f0f05758610bee21dfe03ae1.png
7.SUM() - 返回总和

作用:


[*]SUM() 函数返回数值列的总数。
语法:
SELECT SUM(column_name) FROM table_name;

演示:
1)查找 “access_log” 表的 “count” 字段的总数:
https://img-blog.csdnimg.cn/img_convert/84a61513e07cf64eb337fd59fe569efd.png
第四节 scalar 函数

1.UCASE() - 将某个字段转换为大写

作用:


[*]UCASE() 函数把字段的值转换为大写。
语法:
SELECT UCASE(column_name) FROM table_name;

演示:
1)从 “Websites” 表中选取 “name” 和 “url” 列,并把 “name” 列的值转换为大写:
https://img-blog.csdnimg.cn/img_convert/d934ea055b570bd6cd0bb08a84c4aae1.png
2.LCASE() - 将某个字段转换为小写

作用:


[*]LCASE() 函数把字段的值转换为小写。
语法:
SELECT LCASE(column_name) FROM table_name;

演示:
1)从 “Websites” 表中选取 “name” 和 “url” 列,并把 “name” 列的值转换为小写:
https://img-blog.csdnimg.cn/img_convert/abb08a565702f466fab2d22cea83f745.png
3.MID() - 从某个文本字段提取字符,MySql 中利用

作用:


[*]MID() 函数用于从文本字段中提取字符。
语法:
SELECT MID(column_name,start[,length]) FROM table_name;
--column_name        必需。要提取字符的字段。
--start        必需。规定开始位置(起始值是 1)。
--length        可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。

演示:
1)从 “Websites” 表的 “name” 列中提取前 2个字符:
https://img-blog.csdnimg.cn/img_convert/4501c687b68a7897e8342dc5fe5059dc.png
4.LEN() - 返回某个文本字段的长度

作用:


[*]LEN() 函数返回文本字段中值的长度。
语法:
SELECT LEN(column_name) FROM table_name;
--MYSQL
SELECT LENGTH(column_name) FROM table_name;

自我先容一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到如今。
深知大多数Linux运维工程师,想要提升技能,每每是自己摸索发展大概是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术故步自封!
因此收集整理了一份《2024年Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
https://img-blog.csdnimg.cn/img_convert/690b66cfcf248d72723649239bced5b8.png
https://img-blog.csdnimg.cn/img_convert/d022921e13a7a944589bcda4da8821af.png
https://img-blog.csdnimg.cn/img_convert/914d3c60176fc699de1f96fff8690517.png
https://img-blog.csdnimg.cn/img_convert/9cf79a644393468ecb1b0c3e76e52da4.png
https://img-blog.csdnimg.cn/img_convert/ecc6bd480d3cc8192690fce1d92fdb03.png
既有适合小白学习的零基础资料,也有适合3年以上履历的小同伴深入学习提升的进阶课程,基本涵盖了95%以上Linux运维知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习条记、源码讲义、实战项目、解说视频,并且后续会连续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)
https://img-blog.csdnimg.cn/img_convert/06a398962ba7ab6ff35842e8f8c0b6c0.jpeg
https://img-blog.csdnimg.cn/img_convert/9a8cb5f8c0ec69e6499adead0da6e95b.png
最全的Linux教程,Linux从入门到夺目
======================

[*] linux从入门到夺目(第2版)
[*] Linux体系移植
[*] Linux驱动开发入门与实战
[*] LINUX 体系移植 第2版
[*] Linux开源网络全栈详解 从DPDK到OpenFlow
https://img-blog.csdnimg.cn/img_convert/59742364bb1338737fe2d315a9e2ec54.png
第一份《Linux从入门到夺目》466页
====================
内容简介
====
本书是获得了许多读者好评的Linux经典脱销书**《Linux从入门到夺目》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者先容了Linux 的基础应用、体系管理、网络应用、娱乐和办公、程序开发、服务器设置、体系安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。
https://img-blog.csdnimg.cn/img_convert/9d4aefb6a92edea27b825e59aa1f2c54.png
本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。
   需要《Linux入门到夺目》、《linux体系移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+批评
一个人可以走的很快,但一群人才气走的更远。岂论你是正从事IT行业的老鸟或是对IT行业感爱好的新人,都欢迎扫码加入我们的的圈子(技术交换、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习发展!
https://img-blog.csdnimg.cn/img_convert/06a398962ba7ab6ff35842e8f8c0b6c0.jpeg
x教程,Linux从入门到夺目
======================

[*] linux从入门到夺目(第2版)
[*] Linux体系移植
[*] Linux驱动开发入门与实战
[*] LINUX 体系移植 第2版
[*] Linux开源网络全栈详解 从DPDK到OpenFlow
https://img-blog.csdnimg.cn/img_convert/59742364bb1338737fe2d315a9e2ec54.png
第一份《Linux从入门到夺目》466页
====================
内容简介
====
本书是获得了许多读者好评的Linux经典脱销书**《Linux从入门到夺目》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者先容了Linux 的基础应用、体系管理、网络应用、娱乐和办公、程序开发、服务器设置、体系安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。
https://img-blog.csdnimg.cn/img_convert/9d4aefb6a92edea27b825e59aa1f2c54.png
本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。
   需要《Linux入门到夺目》、《linux体系移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+批评
一个人可以走的很快,但一群人才气走的更远。岂论你是正从事IT行业的老鸟或是对IT行业感爱好的新人,都欢迎扫码加入我们的的圈子(技术交换、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习发展!
[外链图片转存中…(img-P6k6Xij3-1712549491510)]

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: SQL基础(2),程序人生