想学好数据库,从事有关数据库相关的工作,掌握本文所提供的命令是使用熟练使用数据库的基石
一、常用的指令
1.select
1.1 select...where
1.2 Select … order by ...升序ASC或降序DESC
1.3 Select … group by 按组分类
1.4 Select … join
2.count
3.delete
4.update
5.insert
6.BETWEEN...AND (在什么之间)和 IN( 集合)
7.is null(不为null值) 与 like(模糊查询)、distinct(去除重复值)
8.create
二、实际应用
思路: 创建库-创建表(设置主键)-输入数据-选取数据-退出数据库
2.1 创建库
//初始化表 ,4种初始化方式例如:
on primary ( name=Student4_dat1, filename='E:\DataBase\Student4_dat1.mdf', --主数据文件,起始大小100M,最大200M,超出100M后每次增加20M-- size=100mb, maxsize=200, filegrowth=20), ( name=Student4_dat2, filename='E:\DataBase\Student4_dat1.ndf', --次数据文件,同上-- size=100mb, maxsize=200, filegrowth=20 ) log on ( name =Student4_log1, filename='E:\DataBase\Student4_log1.ldf', --日志文件,增长5%-- size=100mb, maxsize=200, filegrowth=5% ), ( name =Student4_log2, filename='E:\DataBase\Student4_log2.ldf', --日志文件2,超出容量后每次增长20M-- size=100mb, maxsize=200, filegrowth=20 )
// 添加二级数据库
alter database Student(同上),
// 删除二级数据库
DROP DATABASE name1,name2
// 修改数据库名称
(1)alter database name(原先数据库的名称)
modify name=name1(更改数据库的名称)
(2)exec sp_renamedn 'name','name1'
2.2创建表(定义表中类型和数量)
use name
drop table if exists students ; // 删除之前用同样名称的表
create table students(
id int(3) //定义变量
name varchar(50) not null
学号 char(12) , 姓名 nchar(3) , 性别 nchar(1)
)
..
2.3 处理表中数据
创建表完成后,对表数据进行修改操作
2.3.1 输入数据(2是种输入方式,插入新的属性,补充属性数据)
// 插入新列
alter table student
add 联系电话
char
(15)
null
// 在表中插入数据(补充表中数据)
insert student
values(‘’) // 注意:括号里面的数据是创建表中设计的数据,用' ’隔开
2.3.2 修改数据(2种方式,格式更改和数据更改)
格式更改:
alter table student
alter coumn 列的名字 列的类型(字符长度)
例如:
alter table student alter column 联系电话 char(50)
数据更改:
UPDATE 表名 SET 列名=VALUE WHERE [条件]
例如:1.update 课程 set 学分=学分+1 where 课程类别='必修'
2.UPDATE `student` SET `studentname`='嘻嘻哈哈' WHERE `studentname`='万进进' AND sex='女'
2.3.3 查询数据* (难点)
查询的三种方式:基本查询,嵌套查询,联结查询
(1)基本查询
语句1: select *from 表名 where 列名=行值
where 的作用是按条件选取数值,有4种方法:前面都是 select *from 列名
between .. and
like 有2种表示方式下划线_和百分号%,下划线只能模糊1个字符,百分号可以是0个,也可以是多个字符
in 子句 字段内容是结果合集或者子查询中的内容
select 学号 , 课程编号 , 成绩 from 选课 where 课程编号 IN('C606','C607' )
is 子句 is null
select 的作用是选取目标表,主要有几种选取方式:
order by默认按升序排序,asc是升序,desc是降序 into子句:把查询的结果放入一个新建的表中 union将不同的查询数据结合起来,会自动的将重复的数据行删除 group by 将一个或多个列或者表达式的值将结果集中的行分成若干组 例如:select 课程编号 , MAX (成绩) as 最高分 from 选课 group by 课程编号
group by 字句 having
(2)嵌套查询
语句:SELECT Sno,Sname,Sdept FROM Student WHERE Sdept IN( SELECT Sdept FROM Student WHERE Sname='刘晨'--; );
IN谓词后面的语句块中,结尾不需要添加分号
并且字符串都是用单引号来引用的,双引号会报错
in 相当于 =
扩展知识:
>ANY 大于子查询结果中的某个值
>ALL 大于子查询结果中的所有值
<ANY 小于子查询结果中的某个值
<ALL 小于子查询结果中的所有值
>=ANY 大于等于子查询结果中的某个值
>=ALL 大于等于子查询结果中的所有值
<=ANY 小于等于子查询结果中的某个值
<=ALL 小于等于子查询结果中的所有值
=ANY 等于子查询结果中的某个值
=ALL 等于子查询结果中的所有值(通常没有实际意义)
!=(或<>) ANY 不等于子查询结果中的某个值
!=(或<>) ANY 不等于子查询结果中的所有值
(3)联结查询(难)
SQL最强大的功能之一就是能在数据检索查询的执行中联结(join)表。联结是利用SQL的SELECT能执行的最重要的操作,很好地理解联结及其语法是学习SQL的一个极为重要的组成部分。
代码编写:
(内连接)
where 条件= INTER 表 JOIN 表 ON 条件
例如:
SELECT vend_name,prod_name,prod_price FROM vendors,products WHERE vendors.`vend_id` = products.`vend_id` ORDER BY vend_name,prod_name;
等价于 SELECT vend_name,prod_name,prod_price
FROM vendors INNER JOIN products
ON vendors.`vend_id` = products.`vend_id`
ORDER BY vend_name,prod_name;
(内连接) 用自身表查询的数据找到自身
例如:
SELECT prod_id,prod_name FROM products WHERE vend_id = (SELECT vend_id FROM products WHERE prod_id = 'DTNTR')
等价于
SELECT p1.prod_id,p1.prod_name FROM products p1, products p2 WHERE p1.`vend_id` = p2.`vend_id` AND p2.`prod_id` = 'DTNTR';
(外连接) 分左外连接和右外连接,连接后处理包括检索后的表,还包括未检索的表,左外是选取左边全部加右边检索,右外是检索右边全部加左边检索,具体代码实例如下:
SELECT customers.`cust_id`,orders.`order_num` FROM customers LEFT JOIN orders ON customers.`cust_id` = orders.`cust_id`;
也就是从
表 JOIN 表ON 变成
表 LEFT JOIN 表 ON 条件
表 RIGHT JOIN 表ON 条件
扩展查询方法:组合查询
要点:
1. UNION必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔(因此,如果 组合4条SELECT语句,将要使用3个UNION关键字)。
2.UNION中的每个查询必须包含相同的列、表达式或聚集函数(不过各个列不需要以相同的次序列出)。
3.列数据类型必须兼容:类型不必完全相同,但必须是DBMS可以隐含地转换的类型(例如,不同的数值类型或不同的日期类型)。
4.UNION从查询结果集中自动去除了重复的行
5. 相当于用where IN 进行表的连接补充,若想呈现所有的行,必须用 UNION ALL 而不是UNION
SELECT vend_id,prod_id,prod_price
FROM products
WHERE prod_price <= 5
UNION
SELECT vend_id,prod_id,prod_price
FROM products
WHERE vend_id IN(1001,1002);
相当于:
SELECT vend_id,prod_id,prod_price FROM products WHERE prod_price <= 5 OR vend_id IN(1001,1002);
三、总结
使用数据库时还会遇到很多小问题,下一章将会讲数据库在使用过程中遇到的问题以及如何高效的解决题目