目录
数据库的创建与删除:
创建数据库:create database 数据库名;
创建数据表:create table 数据表名;
删除数据表:drop table 数据表名;
删除数据库:drop database 数据库名;
use 数据库名//切换数据库
基本SQL语句
查询:
- 查询所有:select * from 表名; * 表示所有字段/列;
- 模糊查询:select * from 表名 where 列名 like '%关键字%';
增加:
- insert into 表名(列名1,列名2,列名3) values(值1,值2,值3);
- select (值1,值2,值3) union,
- select (值1,值2,值3) union,
- select (值1,值2,值3)
删除:
- 删除所有数据:delete from 表名;
- 根据条件删除数据:delete from 表名 where sid = 1;
修改:
- update 表名 set 字段1 = 值1,字段2 = 值2 where sid = 1;
- 创建表:create table 表名(字段1 数据类型,字段2 数据类型);
- 删除表:drop table 表名;
数据类型:
整形:int
非整形:float
字符串:varchar(10)
日期和类型:datetime
约束:
外键约束-用主表某个字段约束从表某个字段
主键约束-primary key(PK)
非空约束-is not null
唯一约束-unique
默认值约束-default
检查约束-check
显示前几:top;
百分比: percent;
消除重复项:distinct;
between 值1 and 值2:用来判断字段的数值是否在指定范围内;
Select 语句的使用方法:
- 查询时选择所有列
- 查询时选择特定列
- 查询时指定结果集的列名
- 查询时可以使用 distinct 消除重复项
- 在查询时可以使用 top 限制结果集中记录的数量
- 使用 from 子句
- 查询时用 where 语句作为查询条件
- 查询时用 order by 对记录进行排序
- 查询时用 order by 对记录进行排序
- 在select语句后加上order by 子句,将按查询结果中的一列或多列对查询结果进行排序。排序可以是升序的 (asc),也可以是降序的 (desc)
例:
--查询数据按升序
select * from '表名' order by '列名' asc
--查询数据按升降
select * from '表名' order by '列名' desc
函数:
字符串函数:
CHARINDEX-用来寻找一个指定的字符串在另一个字符串中的起始位置;
举例:
SELECT CHARINDEX('SQL','My SQL Course',1);
--返回:4
LEN-返回传递给它的字符串长度;
举例:
SELECT LEN('SQL Server');
--返回:10
LOWER-把传递给它的字符串转换为小写;
举例:
SELECT LOWER('SQL Server');
--返回:sql server
UPPER-把传递给它的字符串转换为大写;
举例:
SELECT UPPER('sql server');
--返回:SQL SERVER
LTRIM-清除字符左边的空格;
举例:
SELECT LTRIM (' 靓仔 ');
--返回:靓仔 (后面的空格保留)
RTRIM-清除字符右边的空格;
举例:
SELECT RTRIM (' 靓仔 ')
--返回: 靓仔(前面的空格保留)
RIGHT(LEFT)-从字符串右边(左边)返回指定数目的字符;
举例:
SELECT RIGHT('我非常.爱学习',3);
--返回:爱学习
REPLACE-替换一个字符串中的字符;
举例:
SELECT REPLACE('我不是小黑子','黑','坤');
--返回:我不是小坤子
日期函数:
GETDATE-取得当前的系统日期;
举例:
SELECT GETDATE();
--返回:今天的日期
DATEADD-将指定的数值添加到指定的日期部分后的日期;
举例:
SELECT DATEADD(mm,4,'2023/01/1');
--返回:以当前的日期格式返回2023-05-01
DATEDIFF-两个日期之间的指定日期部分的区别;
举例:
SELECT DATEDIFF(mm,'2023/01/1','2023/05/1');
--返回:4
DATENAME-日期中指定日期部分的字符串形式;
举例:
SELECT DATENAME(DW,'2023/01/1');
--返回:星期日
DATEPART-日期中指定日期部分的整数形式;
举例:
SELECT DATEPART(DAY,'2023/01/1');
--返回:1
YEAR/MONTH/DAY-日期中指定年、月、日部分;
举例:
SELECT YEAR(GETDATE());
--返回:2023
数学函数:
日期部分 | 缩写 |
年份:YEAR | yyyy |
月份:MONTH | mm |
每年的某一日 | dy |
日期:DAY | dd |
星期 | wk,ww |
工作日 | dw |
小时:HOUR | hh |
分钟:MINUTE | mi,n |
秒:SECOND | ss,s |
毫秒 | ms |
季度 | ms |
系统函数:
CONVERT/CAST - 用来转变数据类型;
举例:
SELECT CONVERT (VARCHAR(5),12345);
--返回:字符串12345
DATALENGTH-返回用于指定表达式的字节数;
举例:
SELECT DATALENGTH ('我是中国人');
--返回:10
高级查询:
统计函数:
5个聚合函数:会自动忽略为null的列
sum()求和;
SELECT SUM(score) FROM score;
--对列中的值求和,只能对数值数据类型的列求和.
max()最大值;
SELECT MAX(score) FROM score;
--返回组中的最大值,只能用于数值,日期和时间数据类型.
min() 最小值;
SELECT MIN(score) FROM score;
--返回组中的最小值,只能用于数值,日期和时间数据类型.
avg() 平均值;
SELECT AVG(score) FROM score
--返回列中值的平均值,只能对数值数据类型的列求平均值.
count() 计数;
SELECT COUNT (score) FROM score;
--返回组中项目的数量
分组: group by;
分组前过滤:where;
分组后过后过滤:having;
联表查询:
内联: inner join 取表的共同部分
select a.scode,a.sname ,b.course,b.score
from student as a
inner join score as b
on a.scode=b.studentid
左联:left join 以左表为基准,不管右表有不有,左表的数据全部显示
select a.scode,a.sname,b.course,b.score
from student as a
left join score as b
on a.scode=b.studentid
右联:rught join 以右表为基准,不管左表有不有,右表的数据全部显示
select a.scode,a.sname,b.course,b.score
from student as a
right join score as b
on a.scode=b.studentid
全联:full join 两个表的所有部分显示
select a.scode,a.sname,b.course,b.score
from student as a
full join score as b
on a.scode=b.studentid
子查询:
- 如果子查询用的是比较运算符合,则子查询中返回的必须是单行单列
例:
--查询比刘年富学号大的学生
select * from表名where scode>(
select scode from表名where sname='刘年富')
--将年龄比'李斯文'大的年龄加6岁
update stuinfo setstuage=stuage+6 where stuage>(
select stuage from stuinfo where stuname='李斯文')
多行数据插入:
- union
insert into stuInfo(stuNo, stuName, stuSex, stuAge, strAddress)
select 's25325','曾金龙','女',28,'北京海淀'
union
select 's25328','周帅','女',28,'北京海淀'
union
select 's25329','刘阳','女',28,'北京海淀'
复制表格(连带数据一起复制):
select * into newb from stuinfo;
只复制表,不复制数据:
select * into newbb from stuinfo where 1=0;
视图:
- 视图是一张虚拟表,它表示一张表的部分数据或多张表的综合数据,其结构和数据是建立在对表的查询基础上。
- 视图中并不存放数据,而是存放在视图所引用的原始表(基表)中同一张原始表,根据不同用户的不同需求,可以创建不同的视图。
- 视图(view)是在基本表之上建立的虚拟表,它的结构(即所定义的列)和内容(即所有数据行)都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象和在逻辑意义上建立的新关系。
- 视图内的数据不能修改以及删除,但是视图可以删除,用drop。
创建视图:
create view v_name
as
select a.stuname,a.stusex,b.writtenexam,b.labexam
from stuinfo as a
left join stumarks as b
on a.stuno=b.stuno
删除视图:drop view 视图名;