SQL Server 基本SQL用法
2016-08-01 21:08
357 查看
SQL Server 基本SQL用法
SQL Server 基本SQL用法DDL_数据库操作
DDL_数据表操作
DML_增删改
DML_查询
DML_多表联合查询
视图
索引
DDL_数据库操作
--这是注释 --有关数据库操作的DDL指令 --①创建一个新的数据库 --一个SQLsever数据库包含一个数据文件,和一个日志文件 --数据文件(mdf)用来存储数据库中的数据 --日志文件(ldf)存储数据库的操作日志 create database db_test on ( name = 'db_test', filename='e:\dbfiles\dbtest.mdf', size=10, maxsize=100, filegrowth=5 ) log on ( name='db_test_log', filename='e:\dbfiles\dbtestlog.ldf', size=2, maxsize=10, filegrowth=1 ); --drop: 刪除 数据对象 --delete 删除数据 drop database db_test; --使用指定的数据库 use db_test; --数据库的备份 backup database db_test to disk='e:\aaa.bak' with format,name = 'tset'; --查看备份文件内部信息 restore filelistonly from disk='e:\aaa.bak'; --恢复 restore database db_test from disk='e:\aaa.bak' with move 'db_test' to 'e:\dbfiles\dbtest.mdf', move 'db_test_log' to 'e:\dbfiles\dbtestlog.ldf' ------------------------------------------------- drop database db_test; create database db_test on( name = 'db_test', filename = 'e:\db_files\db_test.mdf', size=10, maxsize=100, filegrowth=2 ) log on ( name = 'db_test_log', filename='e:\db_files\testlog.ldf', size=2, maxsize=10, filegrowth=1 ); use db_test; create table students ( stu_num char(5) primary key, stu_name varchar(20) not null, stu_sex char(2) not null check (stu_sex='男' or stu_sex='女') default '男', );
DDL_数据表操作
--创建数据表 --一个数据库中可以包含多个数据表,数据是存储在数据表中的 use db_test --删除数据表(如果当前数据表被其他表的外键关联,则需先删除其他表) drop table tb_grade; drop table tb_students; drop table tb_courses; create table tb_students( stu_num int primary key identity(1000001,1), stu_name varchar(20) not null, stu_sex char(2) not null check(stu_sex='男' or stu_sex='女') default('男'), stu_age int not null check (stu_age>0 and stu_age<200), stu_tel char(11) unique ); create table tb_courses( course_num int primary key identity (1001,1), course_name varchar(50) not null, course_xf int not null ); create table tb_grade( snum int, cnum int, score int not null, primary key(snum,cnum),--联合主键的设置 constraint fk_grade_students foreign key (snum) references tb_students(stu_num), constraint fk_grade_course foreign key (cnum) references tb_courses(course_num) ); --1sql中的数据类型: --整型:int --浮点型:float,decinal --字符型:char(定长字符串,少于长度用空格补全,效率高),varchar(最多放多少字节) --2删除数据表 --drop table tb_students --3数据表字段约束 --字段不能为空 not null --字段值唯一 unique --字段类型 char/varchar/int/float --字段值长度 字段类型后面()中定义 --主键约束 primary key 默认唯一 --外键约束 constraint fk_grade_students foreign key (snum) references tb_students(stu_num); --check约束 check(布尔) --默认值 default(' ') --自动增长 identity(1001,1) 字段必须是整型 --修改数据表 --alter/drop 对数据库中的对象进行修改/删除 --update/delete 对数据表的中数据进行修改/删除 --1添加表字段 alter table tb_students add stu_addr varchar(100); --2修改字段约束 alter table tb_students alter column stu_addr varchar(50) not null; alter table tb_grade alter column snum int not null; alter table tb_grade alter column cnum int not null; --3修改表中的主外键关系 alter table tb_grade add constraint pk_grade primary key (snum,cnum); alter table tb_grade drop constraint fk_grade_course; alter table tb_grade add constraint fk_grade_course foreign key (cnum) references tb_courses(course_num); ------------------------------------------------- drop database db_test; create database db_test on( name = 'db_test', filename = 'e:\db_files\db_test.mdf', size=10, maxsize=100, filegrowth=2 ) log on ( name = 'db_test_log', filename='e:\db_files\testlog.ldf', size=2, maxsize=10, filegrowth=1 ); use db_test; create table tb_stus ( stu_num char(5) primary key, stu_name varchar(20) not null, stu_sex char(2) not null check (stu_sex='男' or stu_sex='女') default '男', stu_age int not null, stu_tel char(11) unique ); create table tb_courses( course_num int primary key identity(100,1), course_name varchar(50) not null, course_xf int not null ); create table tb_grade( snum char(5) not null, cnum int not null, score int not null, primary key(snum,cnum), constraint fk_grade_stus foreign key (snum) references tb_stus(stu_num), constraint fk_grade_courses foreign key (cnum) references tb_courses(course_num) );
DML_增删改
----------------------------- --增:向数据表中添加一条记录(一个元组) --insert into <tableName> valuses (v1,v2,v3...) insert into tb_courses values('大学语文',3); insert into tb_stus values ('10010','张三','男',23,'13030303300'); --要求:当进行添加操作时,必须在表名后面通过()列出赋值的字段名,即使是所有字段,也请列出字段名 --好处1:所给的值无需和表定义的列顺序保持一致,只需和表名后列出的字段名保持一致 --好处2:可以提高语句的兼容性/健壮性(例如新添一个字段后则无法使用上面的方式) --insert into <tableName> (c1,c2,c3...) valuses (v1,v2,v3...) insert into tb_stus (stu_num,stu_name,stu_sex,stu_age,stu_tel) values ('10011','李四','女',21,'13030303301'); --删:从数据表中删除不再需要的数据(删除操作针对一个或者多个元组/记录) delete from tb_stus where stu_num = '10016'; delete from tb_stus where stu_age < 24 or stu_age>25; delete from tb_stus where stu_age between 24 and 25; delete from tb_stus where stu_age not between 24 and 25; --改:修改数据表中某条记录的某一列或某几列 update tb_stus set stu_age=27 where stu_num='10010'; update tb_stus set stu_age=17,stu_name='小花',stu_tel='13030303322' where stu_num='10011'; update tb_stus set stu_age=stu_age+1 where stu_sex='女'; update tb_stus set stu_age=stu_age+1;
DML_查询
--查询语句:获取数据库中数据(不会影响数据库中的数据) --单表查询:从某一张表中查询数据 -- * 表示查询出满足条件的所有列 select * from tb_stus; -- 显示指定列 select stu_num,stu_name from tb_stus where stu_age between 23 and 30; --给字段取别名(加不加as都可以) select stu_num as'学号',stu_name '姓名',stu_age '年龄' from tb_stus; --计算列 select stu_num as'学号',stu_name '姓名',2016-stu_age '出生年份' from tb_stus; --条件查询:在select语句后添加where子句表示查询满足条件的数据 select * from tb_stus where stu_sex='男'; select * from tb_stus where stu_age>20; --like查询 --查询出名字中包含字母'T'的学生信息(%代表0~n个字符) select * from tb_stus where stu_name like '%T%'; --查询出名字中首字母'T'的学生信息 select * from tb_stus where stu_name like 'T%'; --查询出名字中包含字母'i'的学生信息( _ 代表任意一个字符) select * from tb_stus where stu_name like '_i%'; --between..and.. 关键字 select * from tb_stus where stu_age between 19 and 24; --not 条件取反 select * from tb_stus where stu_name not like 'T%'; select * from tb_stus where stu_age not between 19 and 24; --多条件查询 ( or , and) select * from tb_stus where (stu_age<20 and stu_sex='女') or stu_num='10010'; select * from tb_stus where stu_age <=20 or stu_sex='女'; --group by分组查询 select 不能字节显示字段名,只能显示被分组的字段名。 --或者聚合函数(count,avg,max,min,sum) --count(*) 统计记录数 --avg(column) 统计指定字段的平均值 --max(column) 获取当前字段的最大值 --min(column) 获取当前字段的最小值 --sum(column) 统计指定字段的值总和 select stu_sex '性别', sum(stu_age) '总和', min (stu_age) '最小年龄', max(stu_age) '最大值', avg(stu_age) '平均值', count(*) '人数' from tb_stus group by stu_sex; select stu_sex '性别',count(*) '人数' from tb_stus group by stu_sex; --筛选后分组 select stu_sex '性别',count(*) '人数' from tb_stus where stu_age>20 group by stu_sex; --分组后筛选 having --显示平均年龄大于24的分组(按性别分组) select stu_sex '性别',count(*) '人数' from tb_stus group by stu_sex having avg(stu_age)>24; --嵌套查询 select * from tb_stus where stu_age>20 and stu_num in (select stu_num from tb_stus where stu_sex='女'); --排序 order by :对查询结果按照某个字段查询 select * from tb_stus order by stu_age;--默认升序 select * from tb_stus order by stu_age desc;--降序 select * from tb_stus order by stu_age asc;--升序 --多字段排序 select * from tb_stus order by stu_sex desc,stu_age asc; --查询前2条 select top(2) * from tb_stus; select top(2) stu_num from tb_stus; select * from tb_stus where stu_num not in (select top(2) stu_num from tb_stus); --分页查询 --select top(m) * from tb_stus --where stu_num not in (select top((n-1)*m) stu_num from tb_stus);
DML_多表联合查询
--创建部门表 use db_test create table dept( deptno int primary key identity(1001,1), dname varchar(20) not null, daddr varchar(30) not null ); use db_test create table emp( eno varchar(5) primary key, name varchar(20) not null, age int not null, sal decimal(8,2) not null, deptno int, constraint fk_emp_dept foreign key (deptno) references dept(deptno) ); --添加5个部门信息 insert into dept(dname,daddr) values ('市场部','武汉'); insert into dept(dname,daddr) values ('研发部','宜昌'); insert into dept(dname,daddr) values ('人事部','北京'); insert into dept(dname,daddr) values ('财务部','上海'); insert into dept(dname,daddr) values ('售后服务部','深圳'); --添加8个员工信息 --研发部1002 insert into emp(eno,name,age,sal,deptno) values ('10001','张三',23,1000.00,1002); insert into emp(eno,name,age,sal,deptno) values ('10003','李四',29,1300.00,1002); insert into emp(eno,name,age,sal,deptno) values ('10007','赵六',33,1700.00,1002); --市场部1001 insert into emp(eno,name,age,sal,deptno) values ('10002','mike',19,800.00,1001); insert into emp(eno,name,age,sal,deptno) values ('10004','rose',21,1200.00,1001); --财务部1004 insert into emp(eno,name,age,sal,deptno) values ('10005','jack',22,3000.00,1004); --无部门 insert into emp(eno,name,age,sal,deptno) values ('10006','tom',26,2400.00,null); insert into emp(eno,name,age,sal,deptno) values ('10008','hans',28,2000.00,null); --多表联合查询:查询的数据来至于多张表 select * from dept; select * from emp; --自然连接查询:是一种特殊的等值连接 --无需指定字段,可以自动匹配 --查询结果要去除重复列 select dept.deptno,dname,daddr,eno,name,age,sal from dept,emp where emp.deptno = dept.deptno; --左连接:左表数据都会显示 select * from dept left join emp on dept.deptno=emp.deptno; --右连接:右表数据都会显示 select * from dept right join emp on dept.deptno=emp.deptno; --全连接:两张表数据都会显示 select * from dept full join emp on dept.deptno=emp.deptno; --等值连接查询:列出两张表中某个字段值相等的匹配,只显示匹配成功项 select * from dept join emp on emp.deptno = dept.deptno ; select * from dept,emp where emp.deptno = dept.deptno; --给表取别名 select * from dept d,emp e where e.deptno = d.deptno; --多表嵌套联合查询 --查询出研发部的部门编号 select deptno from dept where dname='研发部'; --查询出员工表中部门编号为1002的员工信息 select * from emp where deptno=1002; --查询研发部所有员工的信息 select * from emp where deptno in (select deptno from dept where dname='研发部'); --统计各个部门员工人数 select deptno,count(*) 'num' from emp group by deptno having deptno>0; select * from dept left join(select deptno,count(*) 'num' from emp group by deptno having deptno>0) v on dept.deptno=v.deptno; --查询有员工的部门名称(distinct用于select之后用于去除查询结果的重复项) select dname from dept where deptno in (select distinct deptno from emp); select * from tb_stus; select * from tb_couresses ; --集合查询 select deptno,dname from dept union select eno,name from emp;
视图
use db_test; --视图:可以将查询的结果单独创建成一张"表" create view stu_grade as (select deptno,count(*) 'num' from emp group by deptno having deptno>0); create view stu_nv as(select * from tb_stus where stu_sex='女'); --对视图的更新(删除/添加/修改)都会影响到原表 select * from tb_stus; select * from stu_nv;
索引
--索引相当于一本书的目录,可以很大程度上提高我们的查询效率 --创建索引 --1若将某数据表的某字段设置为主键则会自动为其建立索引 --2若将某数据表的某字段设置为唯一键(unique)则也会自动为其建立索引 --3如果我们频繁的根据某一字段进行查询操作,则需手动在此字段建立索引 create index stu_name_tb_stus on tb_stus(stu_name); drop index stu_name_tb_stus on tb_stus; --同时在两个字段建立索引 create index stu_name_tb_stus on tb_stus(stu_name desc,stu_age asc);
相关文章推荐
- SQL Server中osql/sqlcmd的基本用法
- SQL Server中osql/sqlcmd的基本用法
- SQL SERVER 2012 第三章 T-SQL 基本SELECT语句用法,Where子句详细用法
- 【SQL基础】SQL Server中的T-SQL的基本对象
- PL/SQL DEVELOPER 基本用法
- PL/SQL DEVELOPER 基本用法详解(转)
- PL/SQL DEVELOPER 基本用法详解(转)
- SQL SERVER的SQL一些用法(后面几个到是有些用处)
- SQL的基本用法
- SQL游标的基本用法
- SQL游标的基本用法
- sql语句的基本用法
- SQL语句基本的用法
- PL/SQL DEVELOPER 基本用法详解(转)
- sql 游标的基本用法
- SQL server 2000 的一些基本SQL 语句
- SQL语句基本的用法
- sql时间函数的基本用法
- Sql Server实用操作-动态sql语句基本语法
- PL/SQL DEVELOPER 基本用法详解-PLSQL