【原】数据库SQL语句入门
1.数据定义DDL(Data Definition Language)语言即对表结构的一些定义,主要包括动词为CREATE/DROP/ALTER。
1.1.CREATE语句
CREATE TABLE ( [列级完整性约束条件][, [列级完整性约束条件]]
...
[,]
)
如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。
(1)
CREATE TABLE Student(
Sno CHAR(9) PRIMARY KEY, /列级完整性约束条件,Sno是主键/
Sname CHAR(20) UNIQUE, /Sname取唯一值/
Ssex CHAR(2) DEFAULT '男',
Sage SMALLINT,
Sdept CHAR(20)
)
(2)
DROP TABLE IF EXISTS Course;
create table Course(
Cno CHAR(4) PRIMARY KEY,
Cname CHAR(40),
Cpno CHAR(4),
Ccredit SMALLINT,
FOREIGN KEY (Cpno) REFERENCES Course(Cno)/表级完整性约束条件,被参照表是Course,被参照列是Cno/
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
(3)
DROP TABLE IF EXISTS SC;
CREATE TABLE SC(
Sno CHAR(9),
Cno CHAR(4),
Grade SMALLINT,
PRIMARY KEY(Sno,Cno),
FOREIGN KEY(Sno) REFERENCES Student(Sno),
FOREIGN KEY(Cno) REFERENCES Course(Cno)
)
1.2.ALTER语句
ALTER TABLE
[ADD [完整性约束]][DROP ]
[ALTER COLUMN ]
(1)
ALTER TABLE Student ADD S_entrance DATE;
1.3.DROP语句
DROP TABLE [RESTRICT|CASCADE]
若选择RESTRICT:则该表的删除是有限制条件的。欲删除的基本表不能被其他表的约束所引用(如CHECK、FOREIGN KEY等约束),
不能有视图,不能有触发器,不能有存储过程或函数等。如果存在这些依赖该表的对象,则此表不能被删除。
若选择CASCADE:则该表的删除没有限制条件。在删除基本表的同时,相关的依赖对象,例如视图都将被一起删除。
DROP TABLE Student CASCADE
2.数据操纵语言DML(Data Manipulation Language)即对表格数据中的一些操作,包括的动词为SELECT/INSERT/UPDATE/DELETE
2.1.SELECT语句
SELECT [ALL|DISTINCT] [,]...
FROM [,]...
[WHERE ][GROUP BY [HAVING ]]
[ORDER BY [ASC|DESC]]
- 1.目标列表达式有以下可选格式:
(1)
(2).
(3)COUNT([DISTINCT|ALL] )
(4)[.][,[.]]...
其中可以是由属性列、作用于属性列的聚集函数和常量的任意算数运算(+-/)组成的运算公式。 - 2.聚集函数的一般格式为:
COUNT/SUM/AVG/MAX/MIN ([DISTINCT|ALL] ) - 3.WHERE字句的表达式有以下可选格式:
(1) //ANY|ALL
(2) [NOT] BETWEEN //(SELECT语句) AND //(SELECT语句)
(3) [NOT] IN ([,]...)/(SELECT语句)
(4) [NOT] LIKE
(5) IS [NOT] NULL
(6)[NOT] EXISTS (SELECT语句)
(7) AND/OR [AND/OR ]
2.1.1.单表查询
(1)简单的查询指定列
SELECT Sname,Sage FROM Student WHERE Sage<20;
(2)确定范围,BETWEEN A AND B
SELECT Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN 20 AND 23;
(3)查询经过计算的列
SELECT Sname,2016-Sage FROM student
(4)查询比较大小后的结果
用于比较的运算符如下:=(等于),>(大于),<(小于),>=(大于等于),<=(小于等于),!= 或 <>(不等于),!>(不大于),!<(不小于)
SELECT DISTINCT Sno FROm SC WHERE Grade <60
(5)确定集合
谓词IN用来查找属性值属于指定集合的元组
SELECT Sname,Ssex FROM Student WHERE Sdept [NOT] IN('CS','MA','IS')
(6)字符匹配
谓词LIKE用来进行字符串的匹配,其语法格式为:[NOT] LIKE ''[ESCAPE '']
其含义是查找指定的属性列值与相匹配的元组。可以是一个完整的字符串,也可以含有通配符%和_。
其中,%(百分号)表示任意长度(长度可以为0)的字符串。例如a%b表示以a开头,以b结尾的任意长度的字符串。如acb,addgb,ab等都满足该匹配串。
_(下横线)代表任意单个字符。例如a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb,afb都满足该匹配串。
SELECT Sname FROM student WHERE Sname [NOT] LIKE '欧阳__'
SELECT Sname FROM student WHERE Sname [NOT] LIKE '欧阳%'
若用户要查询的字符串本身就含有通配符%或_,这是就要使用ESCAPE ''短语,对通配符进行转义。
ESCAPE '\'表示""为换码字符。这样匹配串中紧跟在""后面的字符""不再具有通配符的含义,转义为普通的""字符。
查询"DB_"开头,且倒数第3个字符为i的课程的详细情况。
SELECT Cno,Ccredit FROM course WHERE Cname LIKE 'DB_%i__' ESCAPE '\';
(7)涉及空值的查询
SELECT Cno,Ccredit FROM course WHERE Cno IS [NOT] NULL
(8)ORDER BY字句
SELECT * FROM student ORDER BY Sdept,Sage DESC
(9)聚集函数
SELECT COUNT(*) FROM student
SELECT AVG(Sage) FROM student
SELECT Max(Sage) FROM student
(10)GROUP BY
SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno
(11)HAVING
SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) >3
这里先用GROUP BY字句按Sno进行分组,再用聚集函数COUNT对每一组计数。HAVING短语给出了选择组的条件,只有满足条件(即元组个数>3,
表示此学生选修的课超3门)的组才会被选出来。
GROUP BY作用于所有的记录,HAVING短语作用于根据关键字GROUP BY后的组。
2.1.2.连接查询
自然连接,从表student中找到第一个元组然后和在表SC中逐一查找与其匹配的元组,全表扫描,如果已经建立索引的话,会很快。
自然连接可能造成不符合条件的元组的舍弃,如果不想舍弃不满足条件的元组,请用左(右)外连接
SELECT student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student,SC WHERE student.Sno=sc.Sno
自身连接
SELECT FIRST.Cno,SECOND.Cpno FROM course FIRST,course SECOND WHERE FIRST.Cpno=SECOND.Cno
外连接:把舍弃的元组也保存在结果关系中,而在其他属性上填空值(Null),那么这种连接就叫做外连接(outer join)。
左外连接:只把左边关系R中要舍弃的元组保留就叫做左外连接(left outer join或left join)
右外连接:只把右边关系S中要舍弃的元组保留的叫做右外连接(right outer join或right join)
SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student LEFT OUTER JOIN SC ON (Student.Sno=SC.Sno)
多表连接
SELECT student.Sno,Sname,Cname,Grade FROM student,SC,course WHERE student.Sno=sc.Sno AND sc.Cno=course.Cno
嵌套查询,即多个SELECT语句嵌套在一起。
SELECT Sname FROM Student WHERE Sno IN (SELECT Sno FROM SC WHERE Cno='2')
2.2.INSERT语句
INSERT INTO [([,]...)]
VALUES ([,...])
INSERT INTO student (Sno,Sname,Ssex,Sdept,Sage) VALUES('201612545','Tom','男','IS',18)
2.3.UPDATE语句
UPDATE SET =[,=]... [WHERE ]
UPDATE student SET Sage=22 WHERE Sno='201612345'
2.4.DELETE语句
DELETE FROM [WHERE ]
DELETE FROM student WHERE Sno='20161565'
参考自《数据库系统概论第4版》王珊 萨师煊
【原】数据库SQL语句入门的更多相关文章
- 1.SQL语句入门
--SQL语句入门-- --1.sql语言是解释语言 --2.它不区分大小写 --3.没有"",所有字符或者字符串都使用''包含 --4.sql里面也有类似于c#的运算符 -- 算 ...
- 学生选课数据库SQL语句45道练习题整理及mysql常用函数(20161019)
学生选课数据库SQL语句45道练习题: 一. 设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四 ...
- MySQL 数据库SQL语句——高阶版本2
MySQL 数据库SQL语句--高阶版本2 实验准备 数据库表配置: mysql -uroot -p show databases; create database train_ticket; use ...
- MySQL 数据库SQL语句——高阶版本1
MySQL 数据库SQL语句--高阶版本 实验准备,数据表配置 mysql -uroot -p show databases; create database train_ticket; use tr ...
- 02_数据库基础之(二)sql语句入门
1.基本增删改查操作 #一. 数据类型 常用的3中 # .字符串 例如:你的名字 我是中国人 在数据库中要使用 ‘’引起来 '苹果手机' # .整数类型 例如: 你的年龄 ,办公室的人数 个 ,直接使 ...
- 数据库-SQL语句:删除和修改语句-列类型-列约束
使用MySQL客户端连接服务器的两种方式: (1)交互模式: ——查 mysql.exe -h127.0.0.1 -uroot -p mysql -uroot (2)脚本模式:——增删改 m ...
- 数据库 数据库SQL语句四
多表查询 等值连接 --查询员工信息,员工号,姓名,月薪,部门名称 select e.empno,e.ename,d.dname from emp e,dept d where e.deptno=d. ...
- SQL Server数据库sql语句生成器(SqlDataToScript)的使用(sql server自增列(id)插入固定值)
SqlDataToScript是根据表数据进行生成 Insert Into语句,此工具还有一个好处是可以对自增列插入固定值,例如:自增的列id值为5,但是5这个行值已经删除,如果想存储Id自增列值为5 ...
- ORACLE数据库SQL语句的执行过程
SQL语句在数据库中处理过程是怎样的呢?执行顺序呢?在回答这个问题前,我们先来回顾一下:在ORACLE数据库系统架构下,SQL语句由用户进程产生,然后传到相对应的服务端进程,之后由服务器进程执行该SQ ...
随机推荐
- 把DataSet转换成JSON
/// <summary> /// dataTable转换成Json格式 /// </summary> /// <param name="dt"> ...
- sed线上经典案例之-同时替换多个字符串
回答网友请教的一个问题:配置文件如下:[aaa]cfg1=aaaxxxx=bbbcfg2=ccccfg3=ddd[bbb]cfg1=eeeyyyy=fffcfg2=gggcfg3=hhhcfg4=ii ...
- 数据结构与算法C语言实现笔记(1)--表
声明:此一系列博客为阅读<数据结构与算法分析--C语言描述>(Mark Allen Weiss)笔记,部分内容参考自网络:转载请注明出处. 1.表 表是最简单的数据结构,是形如A1.A2. ...
- 六,WPF的Application类
Application.ShutdownMode属性:通过,只要有一个窗口还没有关闭,Application类就保持应用程序处于有效状态,如果这不是所期望的行为,就可以调整该属性. 应用程序事件 Ap ...
- JDBC和DBUtils区别(查询时jdbc只能返回ResultSet需要po转vo,dbutils返回的BeanListHandler与BeanHandler对应集合与对象)
17:34 2013/6/7 JDBC //添加客户 public void addNewCustomer(Customer c) throws DAOException { Connection c ...
- ssh中使用set的地方及ref
22:30 2014/5/2 1.层与层间的set: xml方式:在action中曾有service的set方法,service层要有dao的service的set方法,dao曾要有hibernat ...
- Pair Project: Elevator Scheduler [电梯调度算法的实现和测试]:刘耀先-11061183,罗凡-11061174
本次为我们两个人的第一次结对编程.从总体而言,我们对结对编程比单人编程略显不适应.但是经过一段时间的磨合,我们逐渐的习惯了这种编程方式. 1. 结对编程的优缺点 结对编程的优点: (1) ...
- SpringMVC的controller方法中注解方式传List参数使用@RequestBody
在SpringMVC控制器方法中使用注解方式传List类型的参数时,要使用@RequestBody注解而不是@RequestParam注解: //创建文件夹 @RequestMapping(value ...
- Delphi XE5 android 图解为Android应用制作签名
本文摘自 http://redboy136.blog.163.com/blog/static/107188432201381872820132 要发布android应用,必须做签名的.看一下具体的操作 ...
- centos7和windows7双系统安装
前些天安装了双系统(centos7+win7),其实网上关于这类的教程很多,这篇日志也只是针对本人安装过程中遇到的一些问题进行说明.我是按照先安装win7再安装centos7的顺序. 1.关于分区: ...