数据库学习笔记一

 术语:

DB:数据库。--专门用于存储数据的文件。
DBMS:数据库管理系统。--管理数据文件的系统。
RDBMS:关系型数据库管理系统。--以表格形式存储和管理数据的管理系统。
DDL:数据定义语言。--管理存储结构的命令,如新建表,修改表结构等。
DML:数据操作语言。--管理存储结构中数据的命令,如录入新纪录、各种查询现有数据、删除或修改现有数据。
DCL:数据控制语言。--用户和权限管理,如新建用户、为用户授权等。 

Sqlserver一些基本命令

一.数据库操作
1.查询数据库是否存在
if db_id('dbname') is not null;

2.创建数据库
create database+数据库名;

3.修改数据库的名称

exec sp_renamedb @dbname=旧数据库名, @newname=新数据库名;

4.删除数据库的
drop database 数据库名;

5.指定的数据库
use  数据库名称;

修改或删除若遇到 “无法用排他锁锁定该数据库,以执行该操作。” 错误,则查询当前有哪些会话连接到这个数据库,然后杀掉。

查询:select spid from master.dbo.sysprocesses  where dbid=db_id('数据库名称');

注意:spid是小写,取得进程id。

杀掉:kill spid;

二.表操作

----表----

1.检查表是否存在
if object_id('textdb','U') is not null ;其中U代表用户表。

2.新建表

CREATE TABLE Product(
    [Id] INT PRIMARY KEY,    --主键--
    [Name] NVARCHAR(50) NOT NULL,    --非空约束--
    [Mark] NVARCHAR(200) NOT NULL UNIQUE,    --唯一性约束--
    [Time] DATE DEFAULT GETDATE(),    --默认值约束--
    [Price] INT NOT NULL CHECK([Price]>=10 AND [Price]<=100),    --check约束,要求价格大于10,小于100--
    [PriceDouble] AS [Price]*2,        --as为自动计算字段,不能输入值--
)

3.修改表名

exec sp_rename '原表名', '新表名';

4.删除表结构

truncate from 表名; 删除表结构。

delete和drop是删除表数据的。

----临时表----

1.创建临时表 

 select * into  #TEMP from Product;   从Product向临时表中写入数据。

临时表是在关闭连接之后才会自动消失。 

----列----

1.添加字段

alter table 表名 add 列名 字段类型 not null default 0 ;

2.修改字段名

exec sp_rename '[表名].[字段名]','新字段名' ;

3. 修改字段类型

alter table 表名 alter column 字段名 字段类型;

注意:若修改的字段是关键字段,带有主键,并且字段类型为用户自定义类型,具有默认值的情况下,用上述语句会出现错误。

比如有默认值的情况下就会出错一个或者多个对象访问此列(因为要修改的字段本来是数值型,有默认的初始值,然后要修改成char的数据类型就会出错)

原因就是添加Fname1字段时设置了默认值,导致SQL Server给Fname1字段关联了'DF__HACYU_B__id__5562F3F1'约束。只需要删除'DF__HACYU_B__id__5562F3F1'约束,就可以修改Fname1数据类型了。

删除约束语句如下

alter table HACYU_B drop constraint DF__HACYU_B__id__5562F3F1;

4. 删除字段

alter  table 表名 drop column 字段名;

三.表数据操作

1.查询语句
select*from +表名称 [+where 条件];

2.插入数据

insert into 表名称  values (值1,值2,······,值n);  表的各个字段按照顺序给值。

insert into 表名称  (字段1,字段2,······) values (值1,值2,······); 指定个别字段给值。

insert into table2 select * from Ttable1;  批量插入(table2是已经存在的表)。

select  * into table2 From table1; 批量插入(table2表不存在,是自动创建的)。

3.更新数据

update 表名称 set 字段=值 [+where 条件];

4.删除表

drop table 表名;  清除表中所有数据,表结构在,后边不能加条件进行删除。

truncate from 表名; 删除表结构。 

delete from 表名 where 条件; 删除表数据,可以带条件。

delete from 表名;删除表中所有记录,操作将被记录到日志中,可以恢复。

查询命令拓展 

1.为列,表起别名

select * from UserInfo as ui 

为UserInfo起别名为ui,当然as可以省略。一旦取别名之后,调用表的列时,必须用别名来调用。

2.select查询某些列

select  top 10 * from UserInfo

  • top n 列名 : 表示查询前n行
  • top n percent 列名 : 表示查看前百分之N的数据

3.排序查询

order by  列名  asc|desc

4.条件查询

where 条件

  • between .. and ... : 区间之间,,连续区间
  • in(n1,n2) : 符合n1或者n2条件,非连续
  • 逻辑运算符 : and | or | not

  注意: between的and会寻找sql语句中离它最近的。

5.模糊查询

like % _ [] ^

通配符

  • % 表示任意零个或多个字符 
  • _表示任意单个字符
  • [a-f]表示a到f中的任意单个字符
  • [a,f]表示a或f
  • [^a-c]表示不是a到c中的字符

-- 查询班级姓张的同学

select * from ClassInfo

where sName like '张%'

-- 电话号码第二位为0-4

where sPhone like '1[^56789]'

 注意:数据库中的CHAR类型数据不足位数时,用空格会自动补足位数,要是不需要空格的时候,可以使用RTrim() 或者LTrim()。

6.连接查询

内连接(INNER JOIN):有两种,显式的和隐式的。 

外连接分三类:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)和全外连接(FULL OUTER JOIN)。

Student 表

Class表 

 

1). 内连接 (inner join 或者join)

查询的内容严格对应,根据每个表共有的列的值匹配两个表中的行。

隐式内连接

select  * from Student  s ,  Class  c where s.Class_num = c.Class_no

显示内连接

select  * from Student  s inner join   Class  c on s.Class_num = c.Class_no

显示和隐式的结果集是一样的。

2). 左连接(left join 或者left outer oin)

查询的结果集包括SQL语句中左表的所有行右表中匹配的行

如果左表的某行在右表中没有匹配行,则用空值表示。

如果左表数据,在右表中有多行匹配,则查询结果左表为多行显示。 

select * from Class c left join Student s on Class_num = c.Class_no

select  * from Student  s left join   Class  c on s.Class_num = c.Class_no

  

3). 右连接 (right join 或者 right outer join)

查询的结果集包括SQL语句中右表的所有行左表中匹配的行。 

如果右表的某行在左表中没有匹配的行,则左表数据为空。

如果右表数据,在左表中有多行匹配,则查询结果右表为多行显示。 

select * from Class c right join Student s on Class_num = c.Class_no 

 select  * from Student  s right join   Class  c on s.Class_num = c.Class_no

 4). 完全外连接 (full join 或者 full outer join)

查询的结果集包括左右两表中所有的行

select  * from Student  s full join   Class  c on s.Class_num = c.Class_no

 5). 交叉连接

没有 WHERE 子句的交叉联接将产生连接所涉及的表的笛卡尔积。

第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。 

select  * from Student   cross join   Class   

加上WHERE子句,返回符合条件的结果集,和inner join所示执行结果一样。

 select  * from Student  s cross join   Class c  where s.Class_num = c.Class_no

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值