MySQL(4)-----DML数据库操作(下)
2.2.3 DML语句(下)
DML操作是对数据库中表记录的操作,主要包括表记录的插入(insert)、更新(update)、删除(delete)和查询(select)
4.查询记录
语法:mysql>SELECT * FROM tablename[WHERE CONDITION]
如:mysql>select * from r720;
mysql>select * from r720 where id<10 and cpu=45;
(5)表连接
当需要同时显示多个表的字段时,可以通过表连接来实现此功能。从大类上分,表连接可以分为内连接和外连接。
它们之间最主要的区别是:内连接仅选出两张表中互相匹配的记录,而外连接会选出其他不匹配的记录。
我们最常用的是内连接。
mysql>select * from emp;
mysql>select * from dept;
mysql>select ename,deptname from emp,dept where emp.deptno=dept.deptno;
【缺图,下次补上】
外连接又分为左连接和右连接,具体定义如下:
※左连接:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录。
※右连接:包含所有的右边表中的记录甚至是左边表中没有和它匹配的记录。
(6)子查询
某些情况下,当进行查询的时候,需要的条件是另外一个select语句的结果,这个时候就需要用到子查询。用于子查询的关键字主要包括in、not in、=、!=、exists、not exists等。
(7)记录联合
某些情况下,将两个表的数据按照一定的查询条件查询出来后,将结果合并一起显示出来,此时,就需要union和union all关键字来实现这样的功能。具体语法如下:
SELECT * FROM t1
UNION\UNION ALL
SELECT * FROM t2
...
UNION\UNION ALL
SELECT * FROM tn;
【注】UNION和UNION ALL的区别在于:UNION ALL是把结果集直接合并在一起,而UNION是将UNION ALL后的结果进行一次DISTINCT,去除重复记录后的结果。
如:
mysql>select cpu from r720;
mysql>select cpu from nr720;
mysql>select cpu from r720
mysql>union all
mysql>select cpu from nr720;
mysql>select cpu from r720
mysql>union
mysql>select cpu from nr720;
以下内容转自:http://www.cnblogs.com/smyhvae/p/4042303.html
点击打开链接
主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性
外键:是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的。所以说,如果谈到了外键,一定是至少涉及到两张表。例如下面这两张表:
create table department(id int primary key auto_increment,name varchar(20) not null,description varchar(100)
);
create table employee(id int primary key auto_increment,name varchar(10) not null,gender varchar(2) not null,salary float(10,2),age int(2),gmr int,dept_id int
);
2、外键的使用需要满足下列的条件:(这里涉及到了InnoDB的概念)
注:InnoDB是数据库的引擎。MySQL常见引擎有两种:InnoDB和MyISAM,后者不支持外键。
2. 建立外键关系的对应列必须具有相似的InnoDB内部数据类型。
4. 假如显式的给出了CONSTRAINT symbol,那symbol在数据库中必须是唯一的。假如没有显式的给出,InnoDB会自动的创建。
MyISAM:不支持外键约束。不支持事务。对数据大批量导入时,它会边插入数据边建索引,所以为了提高执行效率,应该先禁用索引,在完全导入后再开启索引。
InnoDB:支持外键约束,支持事务。对索引都是单独处理的,无需引用索引。
[CONSTRAINT symbol] FOREIGN KEY [id] (从表的字段1)REFERENCES tbl_name (主表的字段2)[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}][ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}
CONSTRAINT symbol:可以给这个外键约束起一个名字,有了名字,以后找到它就很方便了。如果不加此参数的话,系统会自动分配一个名字。
ON DELETE后面的四个参数:代表的是当删除主表的记录时,所做的约定。
- RESTRICT(限制):如果你想删除的那个主表,它的下面有对应从表的记录,此主表将无法删除。
- CASCADE(级联):如果主表的记录删掉,则从表中相关联的记录都将被删掉。
- SET NULL:将外键设置为空。
- NO ACTION:什么都不做。
我们在第一段中内容中已经将表建好了,数据也填充完了,现在来给从表(员工表)添加外键,让它与主表(部门表)相关联。代码举例如下:
ALTER TABLE employee ADD FOREIGN KEY(dept_id) REFERENCES department(id);
ALTER TABLE employee:在从表employee中进行操作;
ADD FOREIGN KEY(dept_id):将从表的字段dept_id添加为外键;
REFERENCES department(id):映射到主表department当中为id的字段。
运行上方代码后,我们通过navicat来看一下外键有没有添加成功:
上图中,选中表employee,单击红框部分的“设计表”按钮,界面如下:
上图中就可以看到我们新建的外键了,而且系统默认给这个外键起了个名字:employee_ibfk_1。默认规则是RESTRICT。紧接着来给外键设置值:
上图中,我们打开员工表,然后给外键设置值,1代表宣传部,2代表秘书部。
然后我们回到主表(部门表),此时如果想删除id为1的宣传部,会弹出如下提示:(因为外键的默认规则为RESTRICT)
我们在navicat中可以通过图形界面的方式删除外键,也可以通过sql语句来删除。
如果在命令行中不知道外键的名字,可以通过查看表的定义找出外键的名称:
show create table emp;
alter table emp drop foreign key 外键名;
SELECT … FROM join_table
[INNER] JOIN join_table2
[ON join_condition]
WHERE where_definition
解释:只列出这些连接表中与连接条件相匹配的数据行。INNER可以不写,则默认为内连接。[ON join_condition]里面写的是连接的条件。
select e.name,d.name from employee e inner join department d on e.dept_id=d.id;
select e.name,d.name from employee e,department d where e.dept_id=d.id;
SELECT … FROM join_table1(LEFT | RIGHT | FULL) [OUTER] JOIN join_table2ON join_conditionWHERE where_definition
不仅列出与连接条件(on)相匹配的行,还列出左表table1(左外连接)、或右表table2(右外连接)、或两个表(全外连接)中所有符合WHERE过滤条件的数据行。一般都是用左连接或者外连接。
其中,[OUTER]部分可以不写,(LEFT | RIGHT | FULL)部分要写其中一个。
SELECT … FROM join_table1 CROSS JOIN join_table2;
没有ON子句和WHERE子句,它返回的是连接表中所有数据行的笛卡尔积。
笛卡尔积举例:假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)}
其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
SELECT … FROM table1, table2;
4、自连接:参与连接的表都是同一张表。(通过给表取别名虚拟出两张表)
举例:查询出员工姓名和其leader的姓名(类似于求节点及其父节点)
作用:某些情况下,当进行查询的时候,需要的条件是另外一个select 语句的结果,这个时候,就要用到子查询。
定义:为了给主查询(外部查询)提供数据而首先执行的查询(内部查询)被叫做子查询。也就是说,先执行子查询,根据子查询的结果,再执行主查询。
关键字:用于子查询的关键字主要包括 IN、NOT IN、EXIST、NOT EXIST、=、<>等(符号“<>”的意思是:不等于)。
上面的例子中,我们就是先通过聚合函数查出最高的月薪,然后根据这个值查出对应员工的名字。
上面的例子中,先将部门进行分类(前提是部门不能为空),然后分别单独求出各类中的薪水平均值。
3、举例:查询月薪比平均月薪高的员工的名字(我们知道,整体的平均工资是250)
疑问:如果要查询比部门平均工资高的员工,该怎么写呢?下面的这种写法是错误的:
http://www.cnblogs.com/hustcat/archive/2009/10/28/1591648.html(大牛)
http://blog.csdn.net/cuidiwhere/article/details/8452997
http://www.cnblogs.com/cq-home/p/3482101.html
所有MySQL列类型都可以被索引,对相关列使用索引是提高SELECT操作性能的最佳途径。索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。
注:索引的值因为不断改变,所以是它需要维护的。如果数据量较少,建议不用索引。
CREATE INDEX 索引名 ON 表名(列名[(length)]…);
然后,我们在表中可以看到新创建的索引:(我们可以在这个navicat的可视化界面中修改索引类型)
ALTER TABLE 表名 ADD INDEX [索引名] (列名[(length)]…);
CREATE TABLE 表名 ( 表名 ([...],INDEX [索引名] (列名[(length)]…);
注意:如果要创建索引的列的类型是CHAR、VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定length。
这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都必须唯一。例如可以将身份证号作为索引。
创建方式和上方的普通索引类似。即:将普通索引的“index”改为“unique index”。
主键是一种特殊的唯一索引,一般在创建表的时候指定。在 MYSQL 中,当你建立主键时,主键索引同时也已经建立起来了,不必重复设置。
MySQL从3.2版开始支持全文索引和全文检索。在MySQL中,全文索引的索引类型为FULLTEXT。
MySQL5.0版本只有MyISAM存储引擎支持FULLTEXT,并且只限于CHAR、VARCHAR和TEXT类型的列上创建。
创建方式和上方的普通索引类似。即:将普通索引的“index”改为“fulltext index”。
DROP INDEX 索引名 ON 表名
对于MyISAM表在做数据大批量导入时,它会边插入数据边建索引。所以为了提高执行效率,应该先禁用索引,在完全导入后,再开启索引。而InnoDB表对索引都是单独处理的,无需禁用索引。
ALTER TABLE 表名 DISABLE KEYS;
ALTER TABLE 表名 ENABLE KEYS;
- 最适合索引的列是出现在WHERE子句中的列,或连接子句(on语句)中指定的列,而不是出现在SELECT后的列。
- 索引列的值中,不相同的数目越多,索引的效果越好。
- 使用短索引:对于CHAR和VARCHAR列,只用它的一部分来创建索引,可以节省索引空间,也会使查询更快捷。
如:CREATE INDEX part_of_name ON employees(name(10)); 这个句子中指定的length长度为10,就是使用短索引,也就是说取name的前十个字符。
MySQL(4)-----DML数据库操作(下)相关推荐
- mysql写下拉树_PHP+mysql实现从数据库获取下拉树功能的方法
这篇文章主要介绍了PHP+mysql实现从数据库获取下拉树功能,结合实例形式分析了php+mysql数据库查询及select下拉框输出查询结果的实现技巧,需要的朋友可以参考下 本文实例讲述了PHP+m ...
- Node.js 连接 MySQL 并进行数据库操作 –node.js 开发指南
Node.js是一套用来编写高性能网络服务器的JavaScript工具包 通常在NodeJS开发中我们经常涉及到操作数据库,尤其是 MySQL ,作为应用最为广泛的开源数据库则成为我们的首选,本篇就来 ...
- linux如何mysql实现导出数据库,Linux下MySQL导入导出数据库
linux下 一.导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径): 1.导出数据和表结构: mysqldump -u用户名 -p密码 数据库名 > 数据库名.sq ...
- ThinkPHP6之数据库操作下
ThinkPHP6之数据库操作下 前言 一,查询表达式 1.1 where 1.2table和name 1.3field 1.4limit 1.5page 1.6 order 二, 聚合查询 三,分页 ...
- 【MySQL】DML常见操作
文章目录 DML常见操作 一.插⼊操作 1.插⼊单⾏2种⽅式 ⽅式1 ⽅式2 2.批量插⼊2种⽅式 ⽅式1 ⽅式2 3.测试 二.数据更新 1.单表更新 2.多表更新 三.删除数据操作 1.使⽤del ...
- mormot mysql,mORMot 数据库操作
mORMot 数据库操作 1 使用Access数据库, 引用SynCommons, SynDB,SynOleDb三个单元. var gProps: TSQLDBConnectionProperties ...
- emlog mysql文件,emlog数据库操作类
/** * 数据库操作类 * * @copyright (c) Emlog All Rights Reserved */ /** * MYSQL数据操方法封装类 */ class MySql { /* ...
- MySQL DML数据库操作
DML是指数据操作语言,英文全称是Data Manipulation Language,用来对数据库中表的数据记录进行更新. 关键字: 插入insert 删除delete 更新update 思维图: ...
- nodec mysql_Node.js 连接 MySQL 并进行数据库操作 –node.js 开发指南
Node.js是一套用来编写高性能网络服务器的JavaScript工具包 通常在NodeJS开发中我们经常涉及到操作数据库,尤其是 MySQL ,作为应用最为广泛的开源数据库则成为我们的首选,本篇就来 ...
- MYSQL DDL DML代码操作
MYSQL理论 数据库是一个将数据按照一定的数据结构进行组织 ,存储 和 管理的仓库. 关系型数据库指的就是将数据按照一定的关系模组来进行组织的数据库管理系统. 非关系型数据库-NOSQL就是将数据按 ...
最新文章
- addEventListener()与removeEventListener()
- 随想_8_Windows_XP_Explorer_错误
- 爱耳日腾讯天籁行动再升级 助力100位青年听障人才打破“屏障”
- java贪吃蛇不能回头,儿时回忆!泪流满面,Java 实现贪吃蛇游戏的示例(附代码)...
- P1681 最大正方形 Iand II
- 1.eclipse怎么样新建web项目,eclipse新建web项目
- 键盘压缩背景,ios滚动不流畅,禁止遮罩层下面内容滚动
- FileBeats安装
- 微信小程序报thirdScriptError Cannot read property 'setData' of undefined
- Python分析一下双色球,中大奖指日可待!
- HTML窗口与对话框
- mysql ndb 命令_Mysql入门基础命令
- python学而思和猿辅导哪个好_学而思和猿辅导哪个好,说说我的评价
- html编辑个人信息页面,编辑个人信息.html
- JAVA计算机毕业设计林家餐厅自助点餐管理系统(附源码、数据库)
- android 闪光灯程序,如何在Android中以编程方式打开前闪光灯?
- nodejs项目mysql使用sequelize支持存储emoji
- 负数在计算机中的存储和表示
- usaco 奶牛集会 奶牛抗议
- MacBookPro硬盘升级记