SQL语句

一.SQL语法

1.      SQL功能

数据定义(DDL):用户定义、删除和修改数据模式

数据查询(DQL):用于查询数据

数据操纵(DML):用于增、删、改数据

数据控制(DCL):用于控制数据访问权限


2.      语法

SQL的语法很像自然语言。每个语句都是一个祈使句,以动词开头,表示所要做的动作。

3.      命令

SQL由命令组成,每个命令以分号(;)结束。如下面是3个独立的命令:

SELECT id, name FROM foods;

INSERT INTO foods VALUES (NULL, 'Whataburger');

4.      常量

也称为Literals,表示确切的值,有3种:字符串常量、数据常量和二进制常量。

字符串常量如:'Jerry'    'Newman' 'JujyFruit'

数据常量:数字常量有整数、十进制数和科学记数法表示的数,如:-1   3.142  6.0221415E23

二进制值用如x'0000'的表示法,其中每个数据是一个16进制数。二进制值必须由两个两个的16进制数(8 bits)组成,如:x'01' X'0fff'x'0F0EFF'

5.      保留字和标识符

保留字由SQL保留用做特殊的用途,如SELECT  UPDATE、INSERT、CREATE、DROP和BEGIN等。标识符指明数据库里的具体对象,如表或索引。保留字预定义,不能用做标识符。SQL不区分大小写,下面是相同的语句:

    SELECT * fromfoo;

    select * fromfoo;

二.创建数据库

1. 创建表

在SQL中,创建和删除数据库对象的语句一般被称为数据定义语言(data definition language,DDL),操作这些对象中数据的语句称为数据操作语言(data manipulation language,DML)。创建表的语句属于DDL,用CREATETABLE命令,如下定义:

CREATE [TEMP] TABLE table_name (column_definitions [, constraints]);

CREATE TABLE命令至少需要一个表名和一个字段名。命令中table_name表示表名,必须与其它所有的标识符不同。column_definitions表示一个用逗号分隔的字段列表。每个字段定义包括一个名称、一个域和一个逗号分隔的字段约束表。“域”一般情况下是一个类型,与编程语言中的数据类型同名,指明存储在该列的数据的类型。

在SQLite中有5种本地类型:INTEGER、REAL、TEXT、BLOB和NULL

2.改变表

ALTER TABLE table { RENAME TO name | ADD COLUMNcolumn_def }

3.数据查询语句

v  SQL查询语句的基本结构

v  简单查询

v  多表连接查询

v  合并多个结果集

v  SELECT INTO

v  使用TOP限制结果集

v  子查询

SELECT <目标列名序列>

  FROM <数据源>

 [WHERE <检索条件表达式>]

 [GROUP BY <分组依据列>]

 [HAVING <分组提取条件>]

 [ORDER BY <排序依据列>]

SELECT  <目标列名序列>(需要哪些列)

FROM   <表名序列>          (从哪些表)

WHERE <查询条件>  (根据什么条件)


(1)      查询指定列

例:查询全体学生的学号与姓名

SELECT Sno,Sname  FROM Student

 

(2)      查询全部列

例:查询全体学生的详细记录

SELECT Sno,Sname,Ssex, Sage, SdeptFROM Student

等价于:SELECT * FROMStudent

 

(3)      常用的查询条件


例:查询计算机系全体学生

SELECT SnameFROM Student WHERE Sdept=’CS’

例:查询所有年龄在20岁以下的学生姓名及其年龄

SELECTSname, Sage  FROM Student    WHERE Sage< 20

SELECT Sname,Sage  FROM Student     WHERE NOT Sage >= 20

 

(4)      确定范围:

BETWEEN … AND …      包括临界值

NOT BETWEEN… AND …不包括临界值

作用:查找属性值在或不在指定范围内的元组

说明:

BETWEEN后是范围的下限(低值)

AND后是范围的上限(高值)

例:查询年龄在20~23岁之间的学生的姓名、所在系和年龄

SELECT Sname, Sdept, Sage FROM Student WHERE Sage BETWEEN 20 AND 23

等价于:

SELECT Sname, Sdept, Sage FROM Student WHERE Sage >=20 AND Sage<=23

(5)      确定集合

作用:用来查找属性值属于指定集合的元组

例:查询信息系(IS)、数学系(MA)和计算机系(CS)学生的姓名和性别。

SELECTSname, Ssex  FROM Student WHERE Sdept IN(‘IS’,‘CS’, ‘MA’)

等价于:

   SELECT Sname, Ssex  FROM Student WHERE  Sdept=‘IS’ OR  Sdept=‘MA’ OR Sdept=‘CS’

 

(6)      字符匹配

v  一般形式为:列名 [NOT ] LIKE 匹配串

v  作用:查找指定列名与匹配串常量匹配的元组。

v  匹配串类型:匹配串可以是字符串常量,也可以含有通配符。

v  通配符种类:

   %(百分号):匹配0个或多个字符。

    _(下划线):匹配一个字符。

  [ ]:匹配括号中的字符

  [∧ ]:不匹配括号中的字符

例:查询名字中第2个字为“海”字的学生的姓名和学号

SELECTSname, Sno FROM Student WHERE Sname LIKE ‘_海%’

 

(7)      多重条件查询

用逻辑运算符AND和OR组成多条件查询。

例:查询计算机系年龄在20岁以下的学生姓名

SELECT SnameFROM Student WHERE Sdept=‘CS’ AND Sage<20

 

(8)      对查询结果进行排序的子句为:

   ORDER BY <列名> [<列名> … ] [ASC |DESC ]

说明:按<列名>进行升序(ASC)或降序(DESC)排序。

例:查询全体学生情况,查询结果按所在系的系号升序排列,同一系的学生按年龄降序排列

SELECT *FROM Student ORDER BY Sdept, Sage DESC

 

(9)      SQL提供的计算函数

v COUNT(*):统计表中元组个数

v COUNT(<列名>):统计本列非空列值个数

v SUM(<列名>):计算列值总和(必须是数值型列)

v AVG(<列名>):计算列值平均值(必须是数值型列)

v MAX(<列名>):求列值最大值

v MIN(<列名>):求列值最小值

(10)  对查询结果分组

v  作用:可以控制计算的级别(对全表还是对一组)

v  目的:细化计算函数的作用对象

v  分组语句的一般形式:

     [WHERE<条件> ]

    [GROUP BY <分组条件>]

    [HAVING <组自身条件>]

例:统计每门课程的选课人数,列出课程号和人数

SELECT Cno,COUNT(Sno) FROM SC  GROUP BY Cno

 

4.插入数据

语法格式如下:

INSERT [ INTO]

     table_name

    {    [ ( column_list ) ]

        { VALUES

            ( {  expression } [ ,...n] )

         }

    }

v  语法注释:

Ø   [INTO]:一个可选的关键字,可以将它用在 INSERT 和目标表之间。

Ø  table_name:将要接收数据的表或 table 变量的名称。

Ø   (column_list):要在其中插入数据的一列或多列的列表。必须用圆括号将column_list括起来,并且用逗号进行分隔

Ø  VALUES:引入要插入的数据值的列表。对于column_list(如果已指定)中或者表中的每个列,都必须有一个数据值。必须用圆括号将值列表括起来。如果 VALUES 列表中的值与表中列的顺序不相同,或者未包含表中所有列的值,那么必须使用column_list明确地指定存储每个传入值的列。

Ø  最简单的INSERT 语句

例:

     在“Northwind”数据库的“OrderDetails”表里插入一条记录,其中“OrderID”字段的值为10248;“ProductID”字段的值为1;“UnitPrice”字段的值为10;“Quantity”字段的值为2;“Discount”字段的值为0.8 。

程序清单如下:

INSERT [order details](orderid,productid,unitprice,quantity,discount)

VALUES(10248,1,10,2,0.8)

Ø  标识列、允许为空字段的处理

例:

    在“Northwind”数据库的“Categories”表里插入一条记录,其中“CategoryName”字段的值为“图书”;“Description”字段的值为“所有类型的图书” 。

程序清单如下:

INSERT INTO categories(categoryname,description) VALUES('图书','所有类型的图书')

Ø  有默认值字段的处理

例:

   在“学生”数据库中创建“教师”表(性别为有默认值列) 。在该表中录入数据。

程序清单如下:

INSERT INTO teachers(teach_id,teach_name,tsex,tdegree)

VALUES('rj001', '李波',DEFAULT, '本科')

insert Into Student Values (95020, '陈冬', '男','IS', 18);

insert Into SC (Sno, Cno,grade) Values(95020, 1,100);

5.修改数据

 修改数据

   Update <表名>

   Set <列名>=<表达式>[{, <列名>=<表达式>}] Set  列名 表达式 [{,  列名 表达式 }] [Where <条件>]

例:

Ø  将学生95001的年龄改为22岁

  Update Student Set Sage = 22 Where Sno=95001

Ø   将所有学生的年龄增加1岁

  Update Student Set Sage=Sage+1

6.删除语句

 删除数据

Delete From <表名>[Where <条件>]

例:

 删除学号为95019的学生的记录

Delete From Student

Where Sno=95019

 删除所有学生的选课记录

Delete From SC

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值