sql语句

mosh


Sql语句

1 数据定义

1.1 CREATE TABLE

定义基本表

CREATE TABLE <表名> (<列名> <数据类型> [列级完整性约束条件]
                     [, <列名> <数据类型> [列级完整性约束条件]]
                     ...
                     [, <表级完整性约束条件>]);
  • primary key (A1,A2,A3,...):指定主键属性集
  • foreign key (A1,A2,A3,...) references T2:声明表示关系中任意元组在属性(A1,A2,A3,...)上的取值必须对应于T2中某元组在主码属性上的取值

数据类型

  • int:整形。等价于全称integer
  • smallint:小整数型
  • realdouble precision:浮点数与双精度浮点数(精度与机器相关)
  • float(n):精度至少为n位的浮点数
  • char(n):固定长度的字符串
  • varchar(n):可变长度的字符串

例:建立一个“学生信息”表Student:

CREATE TABLE Student
(Sno CHAR(9) PRIMARY KEY,
 Sname CHAR(20) UNIQUE,
 Ssex CHAR(2),
 Sage SMALLINT,
 Sdept CHAR(20)
);

1.2 ALTER TABLE

修改基本表

ALTER TABLE <表名>
[ADD <新列名> <数据类型> [完整性约束]]
[DROP <完整性约束>]
[MODIFY COLUMN <列名> <数据类型>];
  • ADD子句:增加新列和新的完整性约束
  • DROP子句:删除指定的完整性约束
  • MODIFY COLUMN子句:修改原有列的定义,包括列名和数据类型

例子:

ALTER TABLE Student ADD S_entrance DATE;     //向Student表增加“入学时间”列,其数据类型为日期型
ALTER TABLE Student MODITY COLUMN Sage INT;  //将年龄的数据类型由字符型改为整数
ALTER TABLE Student ADD UNIQUE(Sname);       //增加Student表Sname必须取唯一值的约束条件

1.3 DROP TABLE

删除基本表

DROP TABLE <表名> [RESTRICT | CASCADE];
  • RESTRICT:删除是有限制条件的。欲删除的基本表不能被其他表的约束所引用(如:check、foreign key等约束),不能有视图,不能有触发器,不能有存储过程或函数等。如果存在这些依赖该表的对象,则该表不能被删除
  • CASCADE:删除没有条件限制。在删除该表的同时,相关的依赖对象,例如视图,都将被一起删除

2 数据查询

2.1 SELECT

SELECT [ALL | DISTINCT] <目标列表达式> [, <目标列表达式>]...
FROM <表名或视图名> [, <表名或视图名>]...
[WHERE <条件表达式>]
[GROUP BY <列名1> [HAVING <条件表达式>]]
[ORDER BY <列名2> [ASC | DESC]]; 
  • ALL:显示所有(不去重)
  • DISTINCT:去除重复

整个SELECT语句的含义是:根据WHERE子句的条件表达式,从FROM子句指定的基本表或视图中找出满足条件的元组,再按SELECT子句中的目标列表达式,选出元组中的属性值形成结果表
如果有GROUP BY子句,则将结果按<列名1>的值进行分组,该属性列值相等的元组为一个组。通常会在每组中作用聚合函数。如果GROUP BY子句带HAVING子句,则只有满足指定条件的组才予以输出
如果有ORDER BY子句,则结果表还要按<列名2>的值的升序或降序排列

2.2 WHERE

WHERE子句可以使用下列一些条件表达式进行筛选:

  • =:指定属性的值为给定值的
  • IS:如IS NULL。不能被=代替
  • like:字符串匹配
    • %:匹配任意子串
    • _:匹配任意一个字符
  • andornot
  • BETWEEN ANDNOT BETWEEN AND):介于…之间的(不介于…之间的)
  • IN(...):指定属性的值为IN中给出的某个值的
SELECT * from Student WHERE Sname='Bill Gates';                   //名字是Bill Gates的
SELECT * from Student WHERE Sname like '%Bill%';                  //名字中包含有Bill的
SELECT * from Student WHERE Sage BETWEEN 20 AND 23;               //年龄20~23的
SELECT Sname , Ssex from Student WHERE Sdept IN('CS','IS','MA');  //CS、IS或MA系的
SELECT * FROM Student WHERE Sage IS NULL;                         //没有年龄信息的

2.3 ORDER BY

对查询结果按一个或多个属性列的升序(ACS)或降低(DESC)排序,默认为升序

例子:

SELECT * FROM Student ORDER BY Sage;
SELECT * FROM Student ORDER BY Sdept, Sage desc; //先按专业升序排序,然后同一专业按年龄降序排序

2.4 LIMIT

可以用于强制SELECT返回指定的记录数

接受1个或2个数字参数。参数必须是一个整数常量:

  • 1个参数:表示返回最前面的记录行数目
  • 2个参数:第一个指定第一个返回记录行的偏移量(从0开始算),第二个参数指定返回记录行的最大数目

例子:

SELECT * FROM Student LIMIT 5, 10;  //返回记录行6-15
SELECT * FROM Student LIMIT 5;      //返回前5个记录行

2.5 聚集函数

聚集函数有以下几种:countsumavgmaxmin

  • 总数select count(*) as totalcount from table1;
  • 求和select sum(field1) as sumvalue from table1;
  • 平均select avg(field1) as avgvalue from table1;
  • 最大select max(field1) as maxvalue from table1;
  • 最小select min(field1) as minvalue from table1;

2.6 GROUP BY

根据一个或多个属性的值对元组分组,值相同的为一组

分组后聚集函数将作用于每一个组,即每一组都有一个函数值

如果分组后还要求按一定的条件对这些分组进行筛选,最终只输出满足指定条件的组,则使用HAVING短语指定筛选条件

例子:

//按年龄分组,统计每个年龄的人数,并输出(年龄,该年龄的人数)
select Sage, count(*) from Student group by Sage;
//按年龄分组,统计每个年龄的人数,选出人数大于1的分组,输出(年龄,该年龄的人数)
select Sage, count(*) from Student group by Sage having count(*) > 1;

2.7 连接查询

一个查询涉及多个表

假设有2个表——Student表和SC表(选课表):

  • 内连接自然连接):当使用内连接时,如果Student中某些学生没有选课,则在SC中没有相应元组。最终查询结果舍弃了这些学生的信息
  • 外连接:如果想以Student表为主体列出每个学生的基本情况及其选课情况。即使某个学生没有选课,依然在查询结果中显示(SC表的属性上填空值)。就需要使用外连接

例子:

//内连接:查询每个学生及其选修课程的情况(没选课的学生不会列出)
SELECT Student.*, SC.*
FROM Student , SC
WHERE Student.Sno=SC.Sno;

//外连接:查询每个学生及其选修课程的情况(没选课的学生也会列出)
SELECT Student.*, SC.*
FROM Student LEFT JOIN SC ON(Student.Sno=SC.Sno);

3 数据操作

3.1 INSERT

插入元组

INSERT
INTO table1(field1,field2...)
VALUES(value1,value2...);

如果INTO语句没有指定任何属性列名,则新插入的元组必须在每个属性列上均有值

例子:

INSERT INTO Student(Sno, Sname, Ssex, Sdept, Sage)
VALUES('201009013', '王明', 'M', 'CS', 23);

3.2 UPDATE

修改(更新)数据

UPDATE table1
SET field1=value1, field2=value2
WHERE 范围;

功能是修改指定表中满足WHERE子句条件的元组。如果省略WHERE子句,则表示要修改表中的所有元组

例子:

UPDATE Student
SET Sage=22
WHERE Sno='201009013';

3.3 DELETE

删除元素

DELETE
FROM table1
WHERE 范围;

功能是删除指定表中满足WHERE子句条件的元组。如果省略WHERE子句,则表示删除表中的所有元组。但表仍存在

例子:

DELETE
FROM Student
where Sno='201009013';
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis是一个开源的持久层框架,它可以帮助开发者简化数据库操作的代码。MyBatis动态SQL语句是指在编写SQL语句时可以根据不同的条件动态生成不同的SQL语句。 MyBatis提供了以下几种方式来实现动态SQL语句: 1. if元素:通过if元素可以根据条件判断来生成不同的SQL语句片段。例如: ``` <select id="getUserList" parameterType="User" resultType="User"> SELECT * FROM user WHERE 1=1 <if test="name != null"> AND name = #{name} </if> <if test="age != null"> AND age = #{age} </if> </select> ``` 上述示例中,如果传入的User对象中name属性不为空,则会生成AND name = #{name}这段SQL语句。 2. choose、when、otherwise元素:通过choose、when、otherwise元素可以实现类似于switch语句的功能,根据不同的条件选择不同的SQL语句片段。例如: ``` <select id="getUserList" parameterType="User" resultType="User"> SELECT * FROM user WHERE 1=1 <choose> <when test="name != null"> AND name = #{name} </when> <when test="age != null"> AND age = #{age} </when> <otherwise> AND status = 'ACTIVE' </otherwise> </choose> </select> ``` 上述示例中,如果传入的User对象中name属性不为空,则会生成AND name = #{name}这段SQL语句;如果name为空而age不为空,则会生成AND age = #{age}这段SQL语句;如果name和age都为空,则会生成AND status = 'ACTIVE'这段SQL语句。 3. foreach元素:通过foreach元素可以实现对集合类型的参数进行遍历,并生成相应的SQL语句片段。例如: ``` <select id="getUserList" parameterType="List" resultType="User"> SELECT * FROM user WHERE id IN <foreach collection="list" item="id" open="(" separator="," close=")"> #{id} </foreach> </select> ``` 上述示例中,如果传入的List参数中包含[1, 2, 3]三个元素,则会生成SELECT * FROM user WHERE id IN (1, 2, 3)这段SQL语句。 这些是MyBatis动态SQL语句的几种常用方式,通过它们可以根据不同的条件生成不同的SQL语句,提高了SQL语句的灵活性和可复用性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值