- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章SQL语句实例说明 方便学习mysql的朋友由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
MySQL中模式就是数据库 。
SHOW DATABASES,
show databases; 罗列所有数据库名称 。
CREATE DATABASE <数据库名> 。
create database TEST; 创建名为TEST的数据库 。
DROP DATABASE <数据库名> 。
drop database TEST; 删除名为TEST的数据库 。
USE <数据库名> 。
use TEST; 使用名为TEST的数据库 。
SHOW TABLES 。
show tables; 显示当前数据库所有表格 。
SHOW [FULL] COLUMNS FROM <表名> 。
show [full] columns from <表名> 在MySQL数据库中显示表的结构,如果加上full则更加详细 。
DESC <表名> 。
desc TEST; 查看表TEST的结构,同show columns from TEST 。
SHOW CREATE TABLE <表名> 。
show create table TEST,
查看表TEST的所有信息,包括建表语句 。
创建基本表: CREATE TABLE <表名> (<列名> <数据类型>[列级完整性约束条件], <列名> <数据类型>[列级完整性约束条件], ……………… ),
create table STUDENT ( studentId int(30) primary key, name varchar(255), address varchar(255) ); 创建名为STUDENT的表格,有属性studentId,name,address,其中studentId为主键 。
create table TEACHER ( teacherId int(30), name varchar(255), age int(20), studentId int(30), primary key (teacherId), foreign key (studentId) references STUDENT(studentId) ); 创建名为TEACHER的表格,其中teacherId为主键,studentId为外键,引用STUDENT表的主键studentId 。
修改基本表
ALTER TABLE <表名> RENAME <修改后表名> 。
alter table TEACHER rename S; 将TEACHER表的表名改为S 。
ALTER TABLE <表名> ADD COLUMN <列名> <属性类型> 。
alter table TEACHER add column ADDRESS varchar(255); 在表名为TEACHER的表中加入名为ADDRESS的列 。
ALTER TABLE <表名> CHANGE COLUMN <列名> <修改后列名> <属性类型> 。
alter table TEACHER change column ADDRESS address varchar(230); 修改TEACHER表中的列,将ADDRESS的列名改为address 。
ALTER TABLE <表名> DROP [COLUMN] <列名> 。
alter table TEACHER drop [column] address; 删除列名为address的列,column可有可无 。
删除基本表:
DROP TABLE <表名> [RESTRICT|CASCADE] 删除表格 。
drop table STUDENT restrict; 删除STUDENT表。受限制的删除,欲删除的基本表不能被其他表的约束所引用(如check,foreign key等约束), 不能有视图,不能有触发器,不能有存储过程或函数等.
drop table STUDENT cascade,
若选择cascade,则该表删除没有限制。在删除基本表的同时,相关的依赖对象,例如视图,都将被一起删除.
但是我在MySQL测试的时候给错误提示Cannot delete or update a parent row: a foreign key constraint fails,不予以删除,不知道是什么原因.
关于完整约束性:
参考文章:完整性约束的SQL定义 。
ALTER TABLE <表名> ADD CONSTRAINT <约束名> <约束条件> 。
alter table teacher add constraint pk_teacher_id primary key teacher(id),
在teacher表中增加名为pk_teacher_id的主键约束.
ALTER TABLE <表名> DROP <约束条件> 。
alter table teacher drop primary key,
删除teacher表的主键约束.
alter table student add constraint fk_student_teacher foreign key student(teacherId) references teacher(id),
在student表中增加名为fk_student_teacher的约束条件,约束条件为外键约束.
索引的建立与删除
索引的建立:
CREATE [UNIQUE]|[CLUSTER] INDEX <索引名> ON <表名>(<列名> [次序][,<列名> [次序]]……),
UNIQUE 表明此索引的每一个索引值只对应唯一的数据记录.
CLUSTER 表示要建立的索引是聚簇索引.
create unique index id_index on teacher(id asc); 对teacher表的id列建立unique索引,索引名为id_index 。
索引的删除:
DROP INDEX <索引名> ON <表名> 。
drop index id_index on teacher; 在teacher表中删除索引,索引名为id_index 。
另外的方法:
新建索引:
ALTER TABLE <表名> ADD [UNIQUE]|[CLUSTER] INDEX [<索引名>](<列名> [<次序>],[<列名> [<次序>]]……) 。
alter table teacher add unique index id_index(id asc); 在teacher表中对id列升序建立unique索引,索引的名字为id_index 。
删除索引:
ALTER TABLE <表名> DROP INDEX <索引名> 。
alter table teacher drop index id_index; 删除teacher表名为id_index的索引 。
数据库索引的建立有利也有弊,参考文章:
数据查询:
SELECT [ALL|DISTINCT] <目标列表达式> [,<目标列表达式>]…… 。
FROM <表名或视图名> [<表名或视图名>]…… 。
[WHERE <条件表达式>] 。
[GROUP BY <列名1> [HAVING <条件表达式>]] 。
[ORDER BY <列名2> [ASC|DESC] [,<列名3> [ASC|DESC]]……]; 。
查询经过计算的值:
select teacherId as id,salary - 100 as S from teacher,
查询经过计算的值,从teacher表中查询出teacherId字段,别名为id,并且查询出salary字段减去100后的字段,别名为S 。
。
使用函数和字符串:
select teacherid as id,'birth',salary - 20 as SA, lower(name) from teacher,
<目标表达式>可以是字符串常量和函数等,'birth' 为字符串常量,lower(name)为函数,将name字段以小写字母形式输出 。
。
消除取值重复的行:
select distinct name from teacher,
如果没有指定DISTINCT关键词,则缺省为ALL. 。
。
查询满足条件的元组:
WHERE子句常用的查询条件
查询条件 。 |
谓词 。 |
比较 。 |
=, >, <, >=, <=, !=, <>, !>, !< 。 |
确定范围 。 |
BETWEEN AND, NOT BETWEEN AND 。 |
确定集合 。 |
IN, NOT IN 。 |
字符匹配 。 |
LIKE, NOT LIKE 。 |
空值 。 |
IS NULL, IS NOT NULL 。 |
多重条件(逻辑运算) 。 |
AND, OR, NOT 。 |
。
(1)比较大小:
select * from teacher where name = 'test',
select * from teacher where salary > 500,
select * from teacher where salary <> 500,
(2)确定范围:
select * from teacher where salary between 300 and 1000; 。
select * from teacher where salary not between 500 and 1000 。
(3)确定集合 。
select * from teacher where name in('test','test2'),
select * from teacher where name not in('test','test2'),
(4)字符匹配
[NOT] LIKE '<匹配串>' [ESCAPE '<换码字符>'] <匹配串>可以是一个完整的字符串,也可以含有通配符%和_ %代表任意长度(长度可以是0)的字符。例如a%b表示以a开头,以b结尾的任意长度的字符串。如acb,addgb,ab 。
_代表任意单个字符。例如a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb,afb等都满足该匹配串.
select * from teacher where name like '%2%‘; 。
select * from teacher where name like '_e%d'; 。
注意一个汉字要占两个字符的位置.
(5)涉及空值查询:
select * from teacher where name is null,
select * from teacher where name is not null,
注意这里的"is"不能用符号(=)代替.
(6)多重条件查询:
select * from teacher where name = 'test' and salary between 400 and 800,
select * from teacher where name like '%s%' or salary = 500,
。
ORDER BY子句:
ORDER BY 子句对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排列,缺省值为(ASC) 。
select salary from teacher order by salary asc,
select * from teacher order by name desc,salary asc,
聚集函数(aggregate functions)
COUNT([DISTINCT|ALL]*) 统计元组个数 COUNT([DISTINCT|ALL]<列名>) 统计一列值的个数 SUM([DISTINCT|ALL]<列名>) 计算一列值的总和 AVG([DISTINCT|ALL]<列名>) 计算一列值的平均值 MAX([DISTINCT|ALL]<列名>) 求一列值中的最大值 MIN([DISTINCT|ALL]<列名>) 求一列值中的最小值 。
缺省值为ALL 。
select count(distinct name) from teacher; 查询没有重复的名字的个数 。
select count(*) from teacher; 查询teacher表格总记录数 。
select sum(salary) from teacher; 查询teacher表的salary字段的总和 。
select avg(salary) from teacher; 查询teacher表的salary字段的平均值 。
select max(salary) from teacher; 查询teacher表的salary字段的最大值 。
select min(salary) from teacher; 查询teacher表的salary字段的最小值 。
。
GROUP BY子句:
GROUP BY子句将查询结果按某一列或多列的值分组,值相等的为一组。 对查询结果分组的目的是为了细化聚集函数的作用对象。分组后聚集函数将作用于每一个组,即每一组都有一个函数值.
select cno,count(*) from teacher group by cno; 对teacher表格按照cno分组,并算出每组里面有多少个元素 。
如果分组后还要按照一定的条件对这些组进行筛选,最终只输出满足指定条件的组,则可以使用HAVING语句指定筛选条件.
select cno,count(*) from teacher group by cno having count(*) >= 4; 对teacher表格按照cno分组,并算出每组里面有多少个元素,得到元素个数大于等于4的值 。
。
连接查询:
连接查询是关系数据库中最主要的的查询,包括等值连接查询,自然连接查询,非等值连接查询,自身连接查询,外连接查询和复合条件连接查询等.
等值与非等值连接查询:
连接查询的WHERE子句中用来连接两个表的条件称为连接条件或连接谓词,格式为:
[<表名1>.]<列名> <比较运算符> [<表名2>.]<列名2> 。
其中比较运算符主要有:=,>, <, >=, <=, !=(或<>)等 。
。
select s.*,t.* from student as s,teacher as t where s.teacherid = t.teacherid; 等值连接查询,将student表和teacher的信息连接查询出来,连接条件是s.teacherid = t.teacherid 。
自身连接:
一个表与自身进行连接,称为自身连接 。
select teacher.name,student.name from people as teacher,people as student where teacher.name = student.teacher; 自身连接查询,在people表里有两种角色,一种是教师,一种是学生,利用自身连接查询,得到name字段和teacher字段相等的元组 。
外连接:
左外连接列出左边关系中所有元组,右外连接列出右边关系中所有元组.
左外连接:SELECT <目标列表达式>[,<目标列表达式>]…… FROM <表名1> LEFT [OUTER] JOIN <表名2> ON <连接条件> 右外连接:SELECT <目标列表达式>[,<目标列表达式>]…… FROM <表名1> RIGHT [OUTER] JOIN <表名2> ON <连接条件> 。
select s.sno,s.name,c.cno,c.name from student as s left outer join class as c on (s.cno = c.cno); student表和class表进行左外连接,连接条件是s.cno=c.cno 。
select c.cno,c.name,s.sno,s.name from student as s right outer join class as c on (s.cno = c.cno); student表和class表进行右外连接,连接条件为s.cno=c.cno 。
student表数据:
+-----+-----+------+ | sno | cno | name | +-----+-----+------+ | 1 | 1 | 地心 | | 2 | 2 | 华雄 | | 3 | 1 | 孝慈 | | 4 | 3 | 必须 | +-----+-----+------+ 。
class表数据:
+-----+-----+------+ | cid | cno | name | +-----+-----+------+ | 1 | 1 | 化学 | | 2 | 2 | 物理 | | 3 | 3 | 政治 | +-----+-----+------+ 。
。
左外连接效果:
+-----+------+-----+------+ | sno | name | cno | name | +-----+------+-----+------+ | 1 | 地心 | 1 | 化学 | | 2 | 华雄 | 2 | 物理 | | 3 | 孝慈 | 1 | 化学 | | 4 | 必须 | 3 | 政治 | +-----+------+-----+------+ 。
右外连接效果:
+-----+------+-----+------+ | cno | name | sno | name | +-----+------+-----+------+ | 1 | 化学 | 1 | 地心 | | 1 | 化学 | 3 | 孝慈 | | 2 | 物理 | 2 | 华雄 | | 3 | 政治 | 4 | 必须 | +-----+------+-----+------+ 。
MySQL不支持全外连接! 。
。
复合条件连接:
WHERE子句中可以有多个连接条件,称为复合条件连接 。
select s.sno,s.name,c.name,s.score from student s,class c where s.cno = c.cno and s.score < 60; 复合条件连接查询,查询学生信息和课程信息,并且成绩小于60的记录 。
嵌套查询:
一个SELECT-FROM-WHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询.
子查询的SELECT语句中不能使用ORDER BY子句,ORDER BY 子句只能对最终查询结果排序 。
带有IN谓词的子查询
select sno,name from student where cno in ( select cno from student where name = '华雄' ),
查询和"华雄"选同一课程的所有学生的学号和姓名.
。
子查询的查询条件不依赖于父查询,称为不相关子查询.
如果子查询条件依赖于父查询,这类子查询称为相关子查询,整个查询语句称为相关嵌套查询语句.
带有比较运算符的子查询:
select name,cno from student s1 where score > ( select avg(score) from student s2 where s2.name = s1.name ),
查询学生的大于各科平均成绩的科目 。
以上是相关子查询.
。
带有ANY(SOME)或ALL谓词的子查询 。
子查询返回单值时可以用比较运算符,但返回多值时要用ANY(有的系统用SOME)或ALL谓词修饰。使用ALL或ALL谓词时必须使用比较运算符.
>ANY 大于子查询结果的某个值 >ALL 大于子查询结果的所有值 <ANY 小于子查询结果的某个值 <ALL 小于子查询结果的所有值 >=ANY 大于等于子查询结果的某个值 >=ALL 大于等于子查询结果的所有值 <=ANY 小于等于子查询结果的某个值 <=ALL 小于等于子查询结果的所有值 =ANY 等于子查询结果的某个值 =ALL 等于子查询结果的所有值(通常没有实际意义) !=(或<>)ANY 不等于子查询结果的某个值 !=(或<>)ALL 不等于子查询结果的任何一个值 。
select name,score from student where score <= all (select score from student); 查询成绩最小的学生姓名和成绩 。
集合查询:
SELECT语句的查询结果是元组的集合,所以多个SELECT语句的结果可进行集合操作。集合操作主要包括并操作(UNION),交操作(INTERSECT),差操作(EXCEPT)。 参加集合操作的各查询结果的列数必须相同;对应项的数据类型也必须相同。 MySQL数据库不支持INTERSECT和EXCEPT操作! 。
select * from student where cno=1 union select * from student where cno=2; 查询班级1和班级2所有学生信息 。
。
。
数据更新:
插入数据:
插入元组:
INSERT INTO <表名> [(<属性列1>)[,<属性列2>]……] VALUES (<常量1>[,<常量2>]……); 。
例子:
insert into student (cno,name,score) values (2,'横切',85),
。
插入子查询结果:
INSERT INTO <表名> [(<属性1>[,<属性2>]……)] 子查询,
例子:
insert into studentcopy select * from student; 将student表的信息全部复制到studentcopy表中 。
修改数据:
UPDATE <表名> SET <列名>=<表达式>[,<列名>=<表达式>]…… [WHERE <条件>] 。
修改某一元组的值:
update studentcopy set score=80 where sno=1,
修改多个元组的值
update studentcopy set score=score-20,
删除数据:
DELETE FROM <表名> [WHERE <条件>]; 。
。
删除某一元组:
delete from studentcopy where sno=1,
删除多个元组:
delete from studentcopy,
带子查询的删除语句:
delete from studentcopy where cno in (select cno from student as s where s.cno = 2),
视图:
关于视图,它的作用和优缺点可以参考文章:数据库视图介绍 。
建立视图:
CREATE VIEW <视图名> [(<列名>[,<列名>]……)] AS <子查询> [WITH CHECK OPTION] 子查询可以是任意复杂的SELECT语句,但通常不允许含有ORDER BY子句和DISTINCT语句.
WITH CHECK OPTION 表示对视图进行UPDATA,INSERT和DELETE操作时要保证更新,插入或删除的行满足视图定义中的谓词条件 。
组成视图的属性列名或者全部省略或者全部指定,没有第三种选择。如果省略了视图的各个属性列名,则隐含该视图由子查询中SELECT子句目标列中的诸字段组成。 但在下面三种情况下必须明确指定组成视图的所有列名: (1) 某个目标列不是单纯的属性名,而是聚集函数或列表达式。 (2) 多表连接时选出了几个同名列作为视图的字段。 (3) 需要在视图中为某个列启用新的更合适的名字。 。
create view part_student as select * from student where cno = 2; 建立物理班学生的视图 。
create view student_class (sno,student_name,class_name,score) as select s.sno,s.name,c.name,s.score from student as s,class as c where s.cno = c.cno; 结合学生表和选课表建立视图 。
如果以后修改了基本表的结构,则基本表与视图的映射关系就被破坏了,该视图就不能正确工作了。为避免出现这类问题,最好在修改基本表之后删除由该基本表导出的视图,然后重建这个视图.
删除视图:
DROP VIEW <视图名> [CASCADE],
如果视图上还导出了其他视图,则使用CASCADE级联删除语句,把该视图和由它导出的所有视图一起删除.
查询视图:
查询视图和查询基本表类似.
更新视图:
更新视图和更新基本表类似,不过有些限制.
最后此篇关于SQL语句实例说明 方便学习mysql的朋友的文章就讲到这里了,如果你想了解更多关于SQL语句实例说明 方便学习mysql的朋友的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在查看预先重写的 jQuery 代码。我无法理解以下代码。 $('body > *:not(#print-modal):not(script)').clone(); 最佳答案 此选择器匹配以下任何
所以我开始学习MySQL,我对表有点困惑,所以我想澄清一下。数据库中可以有多个表吗?例如: Database1 -Table1 -Username -Password -Table2 -Name
我在 PostgreSQL 中编写了一个函数,其代码如下: for (i = 0; i str[0][i]); values[i] = datumCopy(dat_value,
oid: 行的对象标识符(对象 ID)。这个字段只有在创建表的时候使用了 WITH OIDS ,或者是设置了default_with_oids 配置参数时出现。 这个字段的类型是 oid (和字段同
我在搜索最大连接设备数时发现了 a post大致说: 当使用 P2P_STAR 时,最大设备数量为 10,因为此 topoly 使用 Wi-Fi 热点。也就是说,如果您没有路由器。 这让我问了两个问题
我不明白为什么会这样: Printf.sprintf "%08s" "s" = Printf.sprintf "%8s" "s" - : bool = true 换句话说,我希望: Printf.sp
我正在遵循 Grails in Action 中的示例。我有一个问题,如何理解 addTo*()功能有效。 我有一个简单的域:具有以下关系的用户、帖子、标签: 用户1对M发帖 用户一对一标签 发布 M
请问为什么行 "b[0]= new Child2();"在运行时而不是在编译时失败。请不要检查语法,我只是在这里做了 class Base {} class Child1 : Base {} clas
所以我想进一步加深我对套接字的理解,但是我想首先从最低级别开始(在C语言中,而不是在汇编中大声笑) 但是,我处理的大多数站点都使用SOCK_STREAM或SOCK_DGRAM。但是我已经阅读了Beej
好吧,我对 javascript 语法了解甚少,而且我对 null 的行为感到非常困惑。关于空值有很多讨论,但我似乎无法找出问题所在!请帮我。这是脚本。 var jsonData = '';
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭5 年前。 Improve thi
问题: SeriesSum 类旨在计算以下系列的总和: 类名:SeriesSum 数据成员/实例变量: x:存储整数 n:存储术语数量 sum:用于存储系列总和的双变量 成员函数: SeriesSum
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
今天我在 logcat 中注意到以下内容: D/OpenGLRenderer:0xa2c70600 (CardView) 上的 endAllStagingAnimators,句柄为 0xa2c9d35
如何创建值有序对的列表,例如list1 [(x, y), (x1, y1) ...].?? 学习如何创建此列表后,我需要知道如何将 x 值提供给列表中的用户输入并搜索 x 的下一个值并显示有序对 (x
我在存储过程中有以下逻辑。 这里完成了什么? 如果color为null,替换为'' IF ISNULL(@color, '') <> '' BEGIN END 最佳答案 它等同于: IF (@colo
我知道.Net中的接口(interface)定义了接口(interface)和继承它的类之间的契约。刚刚完成了一个大量使用数据访问层接口(interface)的项目,这让我开始思考。 . .有什么大不
如何防止基类方法被子类覆盖 最佳答案 您不需要做任何特别的事情:默认情况下方法是不可覆盖的。相反,如果您希望该方法可重写,则必须将 virtual 关键字添加到其声明中。 但是请注意,即使方法不可重写
我已阅读以下有关工厂模式的文章 here 请仅引用Class Registration - avoiding reflection这一部分。 这个版本在没有反射的情况下实现了工厂和具体产品之间的减少耦
我正在学习 Java 类(class),但无法完全理解下一课的内容。 目的:本课的目的是通过创建一个模拟 for-each 循环如何工作的替代方案来解释 for-each 循环的工作方式。 在上一课中
我是一名优秀的程序员,十分优秀!