数据库学习之-------标准SQL基础语法总结

前提: 所有下面的sql语句都建立在student表和sc表基础之上!
假设student表内容:
Sno     Sname     Ssex     Sage     Sdept
------------------------------------------
95001     李勇       男         20         CS
95002     刘晨       女         19         IS
95003     王名       女         18         MA
95004     张立       男         18         IS

假设sc表内容:
Sno         Cno         Grade
------------------------------------------
95001         1             92
95001         2             85
95001         3             88
95002         2             90
95002         3             80

1.创建表:
 create table <表名>
  (<列名> <数据类型> [列级完整性约束条件]
       [,<列名> <数据类型> [列级完整性约束条件]...]
       [,<表级完整性约束条件>];
  )
例如:
 create table student
  (Sno CHAR(5) NOT NULL UNIQUE,
   Sname CHAR(20),
   Ssex CHAR(2),
   Sage   INT,
   Sdept CHAR(15)
 );
*2.查询:
[plain] view plain copy
  1. (1)单表查询:  
  2. ·全部查询:  
  3.     select * from student  
  4. ·部分查询:  
  5.     select Sname,Sno, from student  
  6. ·条件查询:  
  7.     select Sname from student where Sdept = 'CS'------比较大小  
  8.     select Sname,Sage from student where Sage < 20  
  9.     select Sname from student Sage between 20 and 30' ------确定范围  
  10.     select Sname from student where Sdept in ('CS','MA')------确定集合  
  11.     select * from student where Sname like ‘刘%’------字符匹配  
  12.     select * from sc where grade is null ------空值查询  
  13.     select * from student where Sdept = ‘CS’and Sage<20 ------多重条件查询  
  14. ·查询结果表取消重复的行:  
  15.     select distinct Sage from student  
  16. ·对查询结果进行排序:  
  17.     select * from student order by Sage desc ------降序  
  18. ·对查询结果进行分组:  
  19.     select Cno,count(Cno) from sc group by Cno  
  20. (2)多表查询:  
  21. ·等值连接查询:
  22.         select student.*,sc.* from student,sc where student.Sno=sc.Sno ------查询每个学生以及选修课程的情况,默认只输出满足结果的元组  
  23. ·自身连接  
  24. ·外连接(因为等值连接查询默认只输出满足结果的元组,为了全部输出所以出现了外连接):
  25.         select student.*,sc.* from student,sc where student.Sno=sc.Sno(*)  
  26. ·复合条件连接:
  27.         select student.Sno,Sname from student,sc where student.Sno=sc.Sno and sc.Cno='2' and sc.grade>90 ------查询选修2号课程且成绩在90分以上的所有学生  
  28.    
  29. (3)嵌套查询:求解方法是由里向外处理  
  30. (4)集合查询:使用UNION自动去掉重复的元组  
  31. (5)集函数:  
  32. ·count([distinct|all] *):统计元组个数  
  33. 例如:select count(*) from student  
  34. ·count([distinct|all] <列名>):统计一列中值的个数  
  35. 例如:select count(distinct Sno) from student  
  36. ·sum([distinct|all] <列名>):计算一列值的总数  
  37. ·avg([distinct|all] <列名>):计算一列值的平均值  
  38. 例如:select avg(Sage) from student  
  39. ·max([distinct|all] <列名>):求一列值中的最大值  
  40. 例如:select max(Sage) from student  
  41. ·min([distinct|all] <列名>):求一列值中的最小值 
3.插入:
(1)插入单个元组:
         insert into student values('95006','陈东','男','18','IS');
         insert into sc(Sno,Cno) values('95006','1');
(2)插入予查询结果
4.更新:
(1)修改某一个元组的值:
         update student set Sage=22 where Sno=‘95001’
(2)修改多个元组的值:
         update student set Sage=Sage+1
5.删除:
(1)删除某一个元组的值:
         delete from student where Sno='95001'
(2)删除多个元组的值:
         delete from sc
6.数据库的一致性:
         修改或者删除数据库某张表的记录时,因为update或者delete语句一次只能操作一个表,当删除的表和多个表有依赖或者关联关系时,可能会带来一些问题。
         例如,student表sc表通过Sno关联,当删除student表中的某个学生记录时,但sc表中却仍然记录着有关该学生的选课记录,数据的参照性完整性收到了破环。只有再次执行删除sc表和相关记录的操作数据才重新处于一致状态。
         但是,当机器发送故障,无法继续执行第二条删除语句,则数据库用于处于不一致状态,因此我们必须保证两条delete语句同时有效!
         解决方法:数据库中引入了事务的概念!

猜你喜欢

转载自blog.csdn.net/qq_37230121/article/details/80583978