SQL

=======常用的SQL增删改查语句
insert 表名 (字段1,字段2,字段n) values('值1','值2','值n')
表中每列数据都进行添加时
insert 表名 values('值1','值2','值n')
update 表名 set 字段1='值1',字段2='值2' where condition
delete from 表名 where condition (部分删除) delete from 表名 where 1 = 1(全部删除)

select * from 表名

==========几种常见数据库的分页语句

SQLServer:    select top  row *  from users where id  not in(select  top  rows  id  from users)"

mySql:    select * from users limit 0,5 查询前5条数据 limit m, n  

m指定要返回的第一行的偏移量,n指定返回行的最大数目(初始行的偏移量是0)

Oracle:    select t1.* from (select t.*,rownum r  from test t) t1 where r between 2 and 3;

1.子查询(非相关子查询)
(1)单行子查询--子查询的返回结果只有一条数据
!子查询通常使用于select语句的where子句中,可以嵌套
!子查询的执行过程遵循由里及外
可使用单行比较符 =,>,<,>=,<=,<>
例:select title,currentprice from product where areaid=(select areaid from area where areaname='江汉路')
(2)多行子查询--子查询的返回结果是多行数据
可使用的比较符 in,all,any|some ,>all,<all,<any|some 表示小于最大值,>any|some 表示大于最小值
在from中使用子查询
例:select A.category,A.title,A.currentprice,B.avgprice from product A,(select categoryid,avg (currnetprice) from product group by categoryid) B where A.categoryid=B.catrgoryid
在select子句中使用子查询
例:select count(productid) 商品个数,
(select count(distinct productid)from ordersdetail) 已订购商品个数,
(select sum(salescount)from product) 已订购商品件数
2.子查询(相关子查询)--依赖于外部主查询的子查询
in 与 exists 的比较
in:适用于主查询结果行数较大,子查询结果行数较小,即“外大内小”
exists:适用于主查询结果行数比较小,子查询结果行数比较大,即“外小内大”
3.T-SQL编程 transaction
T-SQL标识符--数据库名,数据表名,字段名统称为标识符
标识符,分隔符
例:(set赋值)
use meitao
go  --go语句的作用(1)等待go语句前的语句执行完毕之后,在执行go之后的语句(2)将go之前的局部变量清除
--被go分开的局部变量不能共享
declare @count int,@categoryid int
set @categoryid=7
set @count=(select count(*) from product where categoryid=@categoryid)
print '火锅类商品的数量;'+convert(nvarchar(50),@count)
例:(select,赋值一次可以给多个变量赋值)


流程控制语句
(1)begin...and...-------类似于{}
语法:
begin
{sql语句或语句块}
end
注意:begin 和end要成对使用
(2)if...else
例:declare @money int  
    select @money=money from StudentInfo where stuid ='01'  
    if @money >20  
    print '钱太多了'  
    else  
    print '钱太少了' 
(3)while循环
例:declare @i int,@small int  
select @i=1,@small=0  
while @i<=100   --判断的条件  
begin  
set @small =@small +@i   
set @i=@i+1    
end  
print '1+2+3……100的和是'  
print @small
(4)case用法
例1:SELECT [id] ,[name],[school],[score],班级=
case name
    when '小明' then '一班'
    when '花花' then '二班'
    else '三班'
end
from [Table_1]
例2:SELECT [id] ,[name],[school],[score],
case
    when score>=90 then '优秀'
    when score>=80  then '良好'
    when score>=70  then '一班'
    when score>=60  then '及格'
    else  '不及格'
end
from [Table_1]
4.视图,索引,事物
(1)视图,一张虚表,方便查询(只需调用视图即可查看数据,无需在写SQL查询语句)
(2)索引
优点:第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
缺点:第一,创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。
 一般来说,应该在这些列上创建索引。
第一,在经常需要搜索的列上,可以加快搜索的速度;
第二,在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;
第三,在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;
第四,在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;
第五,在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时;
第六,在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。
(3)事务--显示事务/隐示事务(显示事务由用户定义,需要begin transaction语句)
原子性;事务必须是一个原子工作单元,对于其数据的修改,要么全部执行,要么全部不执行
一致性:事务在完成时,必须使所有的数据都保持一致的状态,即事务执行的结果是使数据从一个一致性状态转换为另一个一致性状态
隔离性:由并发事务所做的修改与任何其他并发事务所做的修改隔离,事务不会查看处于中间状态的数据
持久性:事务完成后,对其系统的影响是用久性的,一旦完成,将保持修改后的状态
5.存储过程--将一些固定的操作集中起来,由SQLserver数据库服务器来完成,应用程序只需要调用其名称,即可实现特定的任务

(SQL存储过程示例)

        if exists (select * from sysobjects where name='P_stu')  

drop procedure P_stu  
GO  
create procedure P_stu  
(@num int  )
As  
print'参加'+convert(varchar(5),@num)+'门课考试的学生姓名及学号:'  
select 姓名=(select MName from Member where MID=Score.MID),学号=MID from Score group by MID having count(*)=@num   
--调用存储过程--  

exec P_stu @num=2

        (mySql存储过程示例)

        #创建存储过程,带有输入参数
    DELIMITER //
    CREATE PROCEDURE dept_deleteByID(IN id INT)
    BEGIN
    DELETE FROM dept WHERE deptId=id;
    END//
    #在mySql中调用存储过程

    CALL dept_deleteByID(9)

    在mySQL数据库表中创建外键    

    ALTER TABLE 表名 ADD FOREIGN KEY (字段名) REFERENCES 表名(字段名) ;




一个示例=====================》》》
创建数据库表语句
USE master  
    GO  
    /* 
    $建库
    */  
    --检验数据库是否存在,如果为真,删除此数据库--  
    IF exists(SELECT * FROM sysdatabases WHERE name='Student')  
      DROP DATABASE Student  
    GO  
    CREATE DATABASE Student  
    GO  
      
    --建数据表--  
    USE Student  
    GO  
    CREATE TABLE Member  --学生表  
    (  
      MID  char(10) primary key,  --学生号  
      MName  CHAR(50) NOT NULL  --姓名  
    )  
    GO  
    CREATE TABLE F  --课程表  
    (  
     FID   char(10) primary key,    --课程号  
    FName  CHAR(50) NOT NULL --课程名  
    )  
    GO  
    CREATE TABLE score  --学生成绩表  
    (  
      SID int identity(1,1) primary key,  --成绩记录号  
      FID char(10)  foreign key(FID) references F(FID) ,     --课程号  
      MID char(10)  foreign key(MID) references Member(MID) ,     --学生号  
      Score  int NOT NULL    --成绩  
    )  
    GO  
    --课程表中插入数据--  
    INSERT INTO F(FID,FName)VALUES('F001','语文')  
    INSERT INTO F(FID,FName)VALUES('F002','数学')  
    INSERT INTO F(FID,FName)VALUES('F003','英语')  
    INSERT INTO F(FID,FName)VALUES('F004','历史')  
    --学生表中插入数据--  
    INSERT INTO Member(MID,MName)VALUES('M001','张萨')  
    INSERT INTO Member(MID,MName)VALUES('M002','王强')  
    INSERT INTO Member(MID,MName)VALUES('M003','李三')  
    INSERT INTO Member(MID,MName)VALUES('M004','李四')  
    INSERT INTO Member(MID,MName)VALUES('M005','阳阳')  
    INSERT INTO Member(MID,MName)VALUES('M006','虎子')  
    INSERT INTO Member(MID,MName)VALUES('M007','夏雪')  
    INSERT INTO Member(MID,MName)VALUES('M008','璐璐')  
    INSERT INTO Member(MID,MName)VALUES('M009','珊珊')  
    INSERT INTO Member(MID,MName)VALUES('M010','香奈儿')  
    --成绩表中插入数据--  
    INSERT INTO Score(FID,MID,Score)VALUES('F001','M001',78)  
    INSERT INTO Score(FID,MID,Score)VALUES('F002','M001',67)  
    INSERT INTO Score(FID,MID,Score)VALUES('F003','M001',89)  
    INSERT INTO Score(FID,MID,Score)VALUES('F004','M001',76)  
    INSERT INTO Score(FID,MID,Score)VALUES('F001','M002',89)  
    INSERT INTO Score(FID,MID,Score)VALUES('F002','M002',67)  
    INSERT INTO Score(FID,MID,Score)VALUES('F003','M002',84)  
    INSERT INTO Score(FID,MID,Score)VALUES('F004','M002',96)  
    INSERT INTO Score(FID,MID,Score)VALUES('F001','M003',70)  
    INSERT INTO Score(FID,MID,Score)VALUES('F002','M003',87)  
    INSERT INTO Score(FID,MID,Score)VALUES('F003','M003',92)  
    INSERT INTO Score(FID,MID,Score)VALUES('F004','M003',56)  
    INSERT INTO Score(FID,MID,Score)VALUES('F001','M004',80)  
    INSERT INTO Score(FID,MID,Score)VALUES('F002','M004',78)  
    INSERT INTO Score(FID,MID,Score)VALUES('F003','M004',97)  
    INSERT INTO Score(FID,MID,Score)VALUES('F004','M004',66)  
    INSERT INTO Score(FID,MID,Score)VALUES('F001','M006',88)  
    INSERT INTO Score(FID,MID,Score)VALUES('F002','M006',55)  
    INSERT INTO Score(FID,MID,Score)VALUES('F003','M006',86)  
    INSERT INTO Score(FID,MID,Score)VALUES('F004','M006',79)  
    INSERT INTO Score(FID,MID,Score)VALUES('F002','M007',77)  
    INSERT INTO Score(FID,MID,Score)VALUES('F003','M008',65)  
    INSERT INTO Score(FID,MID,Score)VALUES('F004','M007',48)  
    INSERT INTO Score(FID,MID,Score)VALUES('F004','M009',75)  
    INSERT INTO Score(FID,MID,Score)VALUES('F002','M009',88) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值