sql语句进阶教程(学习sql这⼀篇就够了)
最近从图书馆借了本介绍SQL的书,打算复习⼀下基本语法,记录⼀下笔记,整理⼀下思路,以备⽇后复习之⽤。
PS:本⽂适⽤SQL Server2008语法。
⼀、关系型数据库和SQL
实际上准确的讲,SQL是⼀门语⾔,⽽不是⼀个数据库。
什么是SQL呢?简⽽⾔之,SQL就是维护和使⽤关系型数据库中的的数据的⼀种标准的计算机语⾔。
1.1 SQL语⾔主要有3个主要的组成部分。
1. DML(Data Manipulation Language)数据操纵语⾔。这个模块可以让我们检索、修改、增加、删除数据库中的数据。
2. DDL(Data Definition Language)数据定义语⾔。是的我们能够创建和修改数据库本⾝。如:DDL提供ALTER语句,他让我们可以修改数据库中表的设
计。
3. DCL(Data Control Language)数据控制语⾔,⽤于维护数据库的安全。
在SQL术语中,记录(record)和字段(field)实际上就称为⾏(row)和列(column)。
1.2 主键和外键
主键之所以有必要:
⾸先使你唯⼀标识表中单独的⼀⾏。主键确保了唯⼀性。
可以很容易的将⼀个表和另⼀个表关联。
主键⼀般就会⾃动默认创建索引,提⾼了查询速度。
外键就是说A表中的某个字段,同时是B中的主键,那么这个字段就是A表中的外键。希望A表中的这个外键的值必须是B中已经存在的值。
1.3 数据类型
⼀般来讲,有3中重要的数据类型:
1. 数字(Numeric)
2. 字符(Character)
3. 以及⽇期/时间(Date/Time)
sql自学难吗bit是数字型,它只允许两个值,0和1。
类型长度说明
char固定长度
nchar固定长度处理unicode数据类型(所有的字符使⽤两个字节表⽰)
varchar可变长度效率没char⾼灵活
nvarchar可变长度处理unicode数据类型(所有的字符使⽤两个字节表⽰)
1字节=8位
bit就是位,也叫⽐特位,是计算机表⽰数据最⼩的单位。
byte就是字节,1byte=8bit,1byte就是1B;
⼀个字符=2字节;
1.3 空值
空值不等于空格或空⽩。使⽤NULL表⽰空值。⼆、简单增删改查
2.1 查(列名有空格的情况)
1 2SELECT last name FROM
⽤⽅括号将有空格的列名括起来。
PS: MySql中⽤重⾳符`(~)按键。Oracle⽤双引号。查询顺序,SQL执⾏顺序:
1 2 3 4 5 6
12distinct3 1
2
3
4
6
2.2 增1
2 3 4 5 6columnlist RowValues1 RowValues2 repeat
2.3 改
1 2 3UPDATE table
SET repeat any number of WHERE
2.4 删
1 2 3DELETE FROM table WHERE
删除前可以验证⼀下:
1 2 3 4SELECT COUNT FROM table WHERE
如果想要删除所有的⾏,可以:
1DELETE FROM table
或者
1TRUNCATE TABLE table
TRUNCATE TABLE优势在于速度更快,但是不提供记录事务的结果。
另外⼀个不同点是,TRUNCATE TABLE重新设置了⽤于⾃增型的列的当前值,DELETE不会。
三、别名
关键字:AS
3.1 计算字段
使⽤计算字段可以做如下的事情:
选择特定的单词或者数值
对单个或者多个列进⾏计算
把列和直接量组合在⼀起。
3.2 直接量
这个直接量和表中的数据没有任何关系,就是为了说明所⽤,下⾯这种类型的表达式就叫做直接量(literal value)。
1 2SELECT'直接量'AS`类型` FROM`customers`
如图,结果中直接量就在⼀列中了。
3.3 算数运算
例⼦1:
1 2SELECT num AS FROM
例⼦2:
1 2SELECT' 'AS'fullname' FROM users
在MySql中连接要是⽤CONCAT函数:
1 2 3SELECT
CONCAT' 'AS'fullname' FROM
3.4 别名1)列的别名
1 2SELECT AS FROM
2)表的别名
1 2SELECT
FROM AS
说明:
1. 列的别名是为了显⽰⽤的,别名会作为查询结果的表头,不能在WHERE中使⽤列的别名,会出错
2. 表的别名确实是为了⽅便操作⽤的,可以在WHERE中使⽤列的别名进⾏!
四、使⽤函数
函数要有⼀组圆括号跟在关键字后边,圆括号告诉我们,这是⼀个函数!
4.1 字符函数
LEFT&RIGHT
LEFT(CharacterValue,NumberOfCharacters)
含义:选择CharacterValue字段的左边NumberOfCharacters⼏个字符。ps:RIGHT是右边⼏个字符。
LTRIM&RTRIM
LTRIM(CharacterValue)
可以删除左边开始的空格。RTRIM作⽤类似。
SUBSTRING
SUBSTRING(CharacterValue,StartPositon,NumberOfCharacters)
含义:选择从开始位置(包括),N个长度的字符。
1 2SELECT
SUBSTRING'thewhitegoat'45AS'The Answer'
返回:white
4.2 ⽇期/时间函数
GETDATE
1GETDATE()
返回当前⽇期和时间。
PS:在MySql中,等价函数是NOW,在Oracle中是CURRENT_DATE。
DATEPART
能够分析具体的⽇期,并且返回诸如该⽇期是该⽉中的第⼏天,或者该年份中的第⼏周等信息。1DATEPART(datepart,DateValue)
datepart可以是许多不同的值,如下都是有效值:
year
quarter
month
dayofyear
day
week
weekday
hour
minute
second
DATEDIFF
可以让我们得到任意两个⽇期之间相差的天数(或周数、⽉数等)。
1DATEDIFF(datepart1,startdate1,startdate2)
DATEDIFF Function Expression Resulting Value
DATEDIFF(day,’7/8/2009’,’8/14/2009’)37
DATEDIFF(week,’7/8/2009’,’8/14/2009’)5
DATEDIFF(month,’7/8/2009’,’8/14/2009’)1
DATEDIFF(year,’7/8/2009’,’8/14/2009’)0
PS:MySql中,DATEDIFF函数只允许我们计算两个⽇期之间的天数,如果想要得到⼀个正数,结束的⽇期通常要作为第⼀个参数: 1DATEDIFF(enddate,startdate)
Oracle中没有等价函数
4.3 数值函数
ROUND
允许我们四舍五⼊。
1ROUND(numericvalue,decimalpalaces)
RAND
⽤来产⽣随机数
1RAND([seed])
没有参数时,它会返回0-1之间的⼀个随机数。
1SELECT RAND AS'Random Value'
可选参数seed有的情况下,每次将返回相同的值。这让我想起了Python中的Random包。看来很多时候,⼀些东西是共通的啊。
PI
PI()函数
如果想要对它保留两位⼩数,可以通过复合函数进⾏:
1PI2
将会返回:3.14
4.4 转换函数
CAST函数
允许我们把数据从⼀种类型转换成另⼀种类型。
1CAST(expression AS DateType)
例⼦:
1 2 3SELECT
'2009-04-11'AS'Original Date'
CAST'2009--04-11'AS AS'Converted Date'
ISNULL函数,很有⽤

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。