2015.7.30 第十五课 sql(新建数据库、创建表、注释、查询语句、新增、更新、删除、联合查询)
1、认识数据库并新建:
1)打开数据库,连接到服务器。
2)服务里类型不用管。
3)服务器名称:打个点“.”表示服务器在本地计算机,如果是托管在别人的服务器上,就输入服务器IP地址。
4)身份验证:如果是windows身份验证,就需要有管理员权限。一般托管在别人的服务器上,(包括正常情况下),都是用SQL身份验证,需要输入sa和密码(密码就是安装时让输入的密码)。
2、 建立数据库:
在建立数据库名称时(各种名称时),都遵守一个命名规则:
1)用英文命名
2)每个单词的首字母大写(驼峰原则:首字母大写)
如:StudentInfor(学生信息表)
3、新建表:
右键点击,取名(遵循命名规则)。
4、建字段(数据):
在数据中,每一行都需要一个唯一的标识,也就是主键。主键一般起名就叫ID。
主键=标识=XXXID
主键:这一行数据的唯一标识,也就是我们设置的ID。
1)设置主键的方法:
右键点击想要设置为主键的项目前面的黑色三角形——设置主键
此时我们可以设置我们需要的主键为自增类型。
自增类型是:当我们往这个表里插入数据的时候,它的值会自动+1。(上图的1、2、3..会自动+1往下排,1、2、3、4、5、6……)
2)自增类型设置方法:
5、数据类型:在设置数据时,要注意数据类型。
如:
1)学生ID,数据类型是整形(int),是数字。
2)学生名字,就需要设置字符串(nvarchar(10)用的最多)
数据类型:
- char,示例:UserName char(20) //char(20),字段定长表示20字符/10个汉字,如果只放一个字节,后面就是九个空格(一个中文两个字节)
- nchar,示例:UserTelphone nchar(30) //nchar(30),放15个中文,定长
- varchar,示例:UserAddress varchar(10)放五个中文,变长,如果只放一个字节,就只放一个字节
- nvarchar,示例:UserPhoto nvarchar(max),变长,可以存放照片、文件等
- int ,整数型字段。示例:UserAge int
- float,浮点数据为近似值。示例:UserResults float ,用于表示浮点数值数据的大致数值数据类型。
- datetime ,日期型。 示例:CreateDatetime datetime
- bit,布尔类型。可以设置true是男生,false是女生
如果是内容非常多,不确定长度(如文章),可以用:nvarchar(max)
6、保存表:
*如果要修改表,也要保存,然后刷新一下。
【提问】
问:如果表中的标识1、2、3、4……,我将2删除掉,让3、4自动变成2、3可以吗?
答:不要这么做,我们的项目中,表是和其它表关联的!如果你在这里把2删除了,会让其他关联的表出错的。所以最开始就设定好,不要删除后自动补齐,最好不要删除标识。
7、用代码建数据库或表:
新建查询——在代码编辑器里编写——sql语句(不区分大小写)
1)用以下语句可以建立一个叫Library的数据库:
create database Library
go
use Library
go
2)用以下语句可以建立一个Users的表,建立时要先选中对应数据库:
create table Users
(
UID int primary key,
userName nvarchar(20) not null,
userPwd nvarchar(20) not null
)
8、删除数据库:
如果直接右键删除数据库,会提示错误,“数据库正在被使用”。
所以需要重启服务后,再删除。
*重启服务方法:
控制面板——管理工具——服务——找到对应服务重启以下。(或者sql的配置管理器里面也可以)
在平时做项目时,如果数据库挂了,就需要重启一下服务。
9、加入数据:(一般不会用手动的方式,而是写一个程序读取数据)
手动加入数据方法:右键点击表,选择编辑前200行,对表中的各个项目输入数据,写完后点一下执行按钮,此时表中就有数据了。
*如果想改已经写好的表里的项目(列名),保存后有时候会报错,此时:工具——选项——将箭头所指项目的勾去掉。
10、查询语句:(select)
- select*from Products:查询出Products表里面的所有信息
- select ProductID,ProductName from Products:查询出Products表里面所有的ProductID,ProductName
- select ProductID,ProductName from Products where ProductID=1:查询出Products表里面ProductID=1的所有ProductID和ProductName
- select* from employee where fname='Paul' and job_id=5 :查询出employee表中fname=Paul,并且job_id=5的所有记录
- select*from Products where ProductID in(4,5,6):查询出Products表中ProductID为4,5,6的所有信息
- select*from Products where UnitPrice>10 and UnitPrice<30 order by UnitPrice:查询出Products表中10<UnitPrice<30的所有信息,并按照UnitPrice的大小由小到大排序
- select*from Products where UnitPrice between 10 and 30 order by UnitPrice:上面的另外一种写法
- select * from Employees where FirstName like 'A%':查询出Employees中FirstName里面第一个字母是A的所有人信息
- select*from Employees where FirstName like '%A%':查询出Employees中FirstName里面中间有A的所有人信息
- select*from Employees where FirstName like '%A':查询出Employees中FirstName里面最后一个字母是A的所有人信息
- select count(*) from Employees:查询出Employees表中的所有记录数
- select min(Unitprice)from Products:查询出Products表中Unitprice的最小值
- select max(Unitprice)from Products:查询出Products表中Unitprice的最大值
- select avg(Unitprice)from Products:查询出Products表中Unitprice的平均值
- select sum(Unitprice)from Products:查询出Products表中Unitprice的总和
- select * from Products where Unitprice> (select avg(Unitprice) from Products):有子查询,查找出比平均值高的商品信息
- select top 5* from Products:查询出前五条的记录信息
- select distinct [name] from Category :查出Category 中不重复的name
- select count(distinct name) from Category :查出Category 中不重复的name的数量
11、新增语句:(Insert into)
- insert into BOOK(bookName,bookPrice,bookAuthors) values('C#基础','35','ji')
(插入bookName,bookPrice,bookAuthors这三个字段的值分别是:'C#基础','35','ji')
12、更新语句:(Update...set...[where])
- update BOOK set bookPrice=30 where bookName='C#基础'
(修改BOOK表,让bookName为C#基础的项中的bookPrice=30)
13、删除语句(delete from...)
- delete from BOOK where bookName='C#基础'
(删除Book表中,bookName='C#基础'的所有记录行)
14、联合查询:
1)inner join
select * from A inner join B on A.aID = B.bID :以两表ID为标准,查询出A、B表都具备的项
2)right join
select * from A right join B on A.aID = B.bID :以B表bID为标准,B表全部显示,A表中没有对应值的显示null
3)left join
select * from A left join B on A.aID = B.bID :以A表aID为标准,B表全部显示,A表中没有对应值的显示null