今天做笔试题目的时候,直接被SQL最简单的题目给搞抽抽了,所以我现在的打算是综合的学习一下SQL语句,其实按照网上的东西,SQL语句应该不是很难
在数据库上执行的大部分工作是由sql语句完成,例如:
SELECT lastname FROM Persons====SQL对大小写不敏感==== SQL主要分为两个部分:数据操作语言(DML)和数据定义语言(DDL) 主要的DML语言有: - SELECT:从数据库中获取数据; - UPDATE:更新数据库表中的数据; - DELETE:从数据库中删除数据; - INSERT INTO:向数据库中插入数据
SQL中重要的DDL语句:
CREATE DATEBASE:创建新的数据库ALTER DATEBASE:修改数据库CREATE TABLE:创建新表ALTER TABLE:变更数据表DROP TABLE 删除表CREATE INDEX 创建索引DROP INDEX 删除索引SELECT语法
SELECT 列名称 FROM 表名称和
SELECT * FROM 表名称主要的作用是返回这个表中有哪些数值,distinct主要是重复值 DISTINCT语法
SELECT DISTINCT 列名称 FROM 表名称主要的作用是有条件冲表中选取数据 WHERE语法
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值运算操作符主要有:
运算符描述=等于!=不等于>大于<小于 = 大于等于<=小于等于BETWEEN在某个范围内LINK搜索某种模式注意在SQL中单引号在环绕本文值,如果是数值,则不需要引号。
AND和OR运算符可以在WHERE子句中把两个或多个条件结合起来 如果第一个条件和第二个条件都成立,则AND运算符显示一条记录 如果第一个条件和第二个条件中只要有一个成立,则OR运算符显示一条记录
ORDER BY语句 ORDER BY语句用于根据指定的列对结果集进行排序 ORDER BY语句默认按照升序对记录进行排序 如果希望按照降序对记录进行排序,可以使用DESC关键字 举例:以逆字母顺序显示公司名称,并以数字顺序显示顺序号
SELECT Company,OrderNumber FROM Orders BY Company DESC,OrderNumber ASCINSERT INTO语句用于向表格中插入新的行 语法:
INSERT INTO 表名称 VALUES(值1,值2,……)也可以指定要插入数据的列:
INSERT INTO table_name(列1,列2,……)VALUES(值1,值2,……)update语句用于修改表中的数据 语法:
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值DELETE语句用于删除表中的行 语法
DELETE FROM 表名称 WHERE 列名称=值删除所有行的语法是
DELETE FROM table_name或者
DELETE * FROM table_nameTOP 子句* TOP子句用于规定要返回的纪录的数目。 对于拥有数千条纪录的大型表来说,TOP子句是非常有用的。 语法:
SELECT TOP number|percent column_name(s) FROM table_name举例: 从一个数据中选取规定数目的条目:
SELECT TOP 2 * FROM Persons选取一定比例的条目:
SELECT TOP 50 PERCENT * FROM PersonsLIKE操作符用于在WHERE子句中搜索列中的制定模式。 语法:
SELECT column_name(s) FROM table_name WHERE colunm_name LIKE pattern其实 LIKE操作符的操作精髓在制定模式,我们可以通过通配符,结合LIKE的功能,查找例如所有姓李的客户(”李%”)
IN 操作符允许我们在WHERE子句中规定多个值 SQL IN语法
SELECT colunm_name(s) FROM table_name WHERE ccolunm_name IN (value1,value2,……)BETWEEN操作符在WHERE子句中使用,作用是选取介于两个值之间的数据范围 语法
SELECT column_name(s) FROM table_name WHERE colume_name BETWEEN value1 AND value2注意:一般情况下这个value是数字之类的能够有统一标准辨别的区间,虽然可以对字符之间的区间进行区别,但是不用的数据库之间还是有区别的。
通过使用Alisa,可以为列名称和表名称制定别名(Alisa) 相关语法 表的SQL Alisa语法
SELECT column_name(s) FROM table_name AS alisa_name列的SQL Alisa语法
SELECT column_name AS alisa_name From table_name其实总结的来看 这个就是==AS==的功能
SQL join用于根据两个或者多个表中的列之间的关系,从这些表中查询数据 join有很多种类型,首先举一个例子:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons INNER JOIN Orders ON Persons.Id_P = Orders.Id_P ORDER BY Persons.LastName这里面就用到INNER JOIN(内连接),还有其他的,随后介绍
SQL INNER JOIN 关键字 在表中至少一个匹配时,INNER JOIN 关键字返回。 ==INNER JOIN 和 JOIN 是相同的== INNER JOIN 关键字语法
SELECT column_name(S) FROM table_name1 INNER JOIN table_name2 ON table_name1.column_name=table_name2.column_nameSQL LEFT JOIN 关键字会从左表(table_name1)那里返回所有行,即使右表(table_name2)中没有匹配的行。 LEFT JOIN关键字语法
SELECT colunm_name(s) FROM table_name1 LEFT JOIN table_name2 ON table_name1.column_name=table_name2.colunm_name其实这个理解也不是很难,就是左表中的所有数据 即便是没有跟右表匹配,也应该连接一下。
SQL RIGHT JOIN其实和LEFT JOIN想法,应用参考LEFT JOIN 相关的知识。
SQL FULL JOIN 其实就是参考了LEFT 和RIGHT 只要是左右表中的数值,都会出现在最终表中。
SQL UNION操作符用于合并两个或多个select语句的结果集 ==注意==UNION 内部的SELECT语句必须拥有相同数量的列,列也必须拥有相似的数据类型。 同时每条SELECT语句中的列的顺序必须相同。 SQL UNION语法
SELECT column_name(s)FROM table_name1 UNION SELECT colunm_name(s)FROM table_name2==注释==默认情况,UNION操作符选择不同的数值,需要重复数值,则用UNION ALL SQL UNION ALL语法
SELECT column_name(s)FROM table_name1 UNION ALL SELECT c olunm_name(s)FROM table_name2SQL SELECT INTO语句可用于创建表的备份文件 SQL SELECT INTO语法:
SELECT *(colunme_name) INTO new_table_name[IN externaldatabase] FROM old_table_name==注== select后面的语句是希望整个表备份还是某个列备份。 这个语句后面可以带有WHERE子句、连接语句等 ==其实我个人的理解就是,其实这个INTO语句后面可以按照SQL的复杂度进行添加子句==
CREATE DATABASE语句用于创建数据库 用法:
CREATE DATABASE database_nameCREATE TABLE语句用于创建数据库中的表 相关用法
CREATE TABLE 表名称 ( 列名称1 数据类型, 列名称2 数据类型, …… )SQL约束用于限制加入表的数据类型,主要的约束有:
NOT NULL 约束强制不接受空值UNIQUE 约束唯一标识数据库表中的每条记录PRIMARY KEY 约束唯一标识数据库表中的每条记录(主键必须包含唯一值,不能包含NULL值,每一个表都应该有一个主键,也只能有一个主键)FOREIGN KEY 一个表中的FOREIGN KEY指向另一个表中的PRIMARY KEYCHECK CHECK约束用于限制列中的值的范围,如果对单个列定义CHECK约束,那么只允许特定值,如果对一个表定义CHECK约束,那么约束会在特定列中对值进行限制DEFAULT DEFAULT约束用于向列中插入默认值,如果没有规定其他值,那么将会添加到所有的新记录。CREATE INDEX语句用于在表中创建索引,在不读取整个表的情况下,索引使数据库应用程序可以更快的查找数据。 SQL CREATE INDEX语法 在表上创建一个简单的索引,允许使用重复值:
CREATE INDEX index_name ON table_name(colunm_name)通过使用DROP语句,可以轻松的删除索引,表和数据库。
DROP INDEX/TABLE/DATABASE 相对应的名称==SQL TRUNCATE TABLE== 如果我们仅仅需要删除表内的数据,但不删除表本身,使用TRUNCATE TABLE命令
TRUNCATE TABLE 表名称ALTER 用于在已有表中添加,修改或删除列 相关的语法
ALTER TABLE table_name ADD coluMN_name datatype DROP COLUMN column_name ALTER COLUNM column_name datatypeAUTO INCREMENT字段: 我们通常希望在每次插入新记录时,自动的创建主键字段的值 ==用法== 其实我们在使用的时候 类似的可以在创建的时候,在主键设计相关的值,也可以后期通过alter等相关的操作进行修改。
视图是可视化的表。 SQL CREATE VIEW语法
CREATE VIEW view_name AS SELECT column_name(s) FROM table_nmae WHERE condition==使用视图可以更方便我们以后的查找== SQL 更新视图
SQL CREATE OR REPLACE VIEW Syntax CREATE OR REPLACE VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition其实就是我们日常操作数据库或者表的时候的语法,注意前面写成VIEW即可 SQL撤销视图
SQL DROP VIEW Syntas DROP VIEW view_nameSQL 内建函数的使用方法:
SELECT function(列)FROM 表相关函数的用法 AVG() 计算平均值,其输出是一个数值 COUNT() 返回的是制定条件的的行数 FIRST()/LAST() 返回表格的第一(最后)个记录的值 MAX()/MIN() 返回一列中的最大(最小)值,NULL不计算其中 SUM() SUM函数返回数值列的总和 GROUP BY GROUP BY函数用于合计函数,根据一个或者多个结果集进行分组。 GROUP BY语法
SELECT colume_name,func(colume_name) FROM table_name WHERE colume_name operator value GROUP BY colume_nameHAVING 在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用 HAVING的语法如下:
SELECT column_name, 合计函数(column_name) FROM table_name WHERE column_name 操作方法 GROUP BY column_name HAVING 合计函数(column_name) 操作值UCASE UCASE 函数把字段的值转换为大写。 LCASE LCASE函数把字段值转换为小写 LEN LEN 函数返回文本字段中值的长度。 ROUND ROUND 函数用于把数值字段舍入为指定的小数位数。 SQL ROUND()语法如下:
SELECT ROUND(column_name,decimals) FROM table_namedecimals字段就是控制小数位数。 NOW 返回当前的时间和日期 FORMAT FORMAT 函数用于对字段的显示进行格式化。 SQL FORMAT()语法如下:
SELECT ROUND(column_name,format) FROM table_name相关范式:
范式是符合某一种级别的关系模式的集合。关系数据库中的关系必须满足一定的要求,满足不同程度要求的为不同范式。
第一范式(1NF) 在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求 所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。 简而言之,==第一范式就是无重复的列==。 第二范式(2NF) 第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。这个唯一属性列被称为主关键字或主键、主码。 简而言之,==第二范式就是非主属性非部分依赖于主关键字==。 第三范式(3NF) 满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。 例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在图3-2的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。 简而言之,==第三范式就是属性不依赖于其它非主属性==。