mysql的使用和sql语言的学习
2015-07-31 19:33
429 查看
MySql的安装和卸载:
windows
字符集的说明:
Mysql安装的时候是 :
windows是GBK gb2312;
Linux是utf8;
环境变量:
软盘和软驱:
ab两个盘符一直没用是为软盘和软驱的纪念;
安装的文件的目录:
bin:binary里面绝大部分是命令,可执行的二进制文件
Mysql的安装结构:
bin
data: 包含数据库的数据:表,视图,索引。。。
my.ini:配置文件,mysql启动的时候读取配置文件
登陆数据库:
>mysql -u userName -p [-h ip]
>password:pwd
mysql>
注意: -u user
-p password
-h hostname Mysql服务器的ip地址
第二种>mysql -uuserName -ppassword [-hip]
数据库列数据类型:
整数类型:
bit(M)
tinyint 1B
int(M) 4B 默认显示十一位整数
浮点数类型:
float(M,D) 4B 单精度
double(M,D)
以上两个是浮点型小数
decimal(M,D)
M除小数点之外的位数 D小数点后的位数
decimal(7,3) 1234.567 numberic(M,D)
decimal(4),表示整数 不用decimal(4,0)
日期/时间类型:
date 4B 支持范围:1000-01-01到9999-12-31
datetime 8B 时间和日期的组合
timestamp 4B 时间戳
year
字符串类型
char(M) 定长 如果存放的数据字节数<=M 此时在内存中所占的空间还是M
特点:可能浪费存储空间,速度,比如表示性别,四字成语,手机号,身份证号
varchar(M)变长 vary(variable) character 如果存放的数据字节数N<=M,此时真正存放的空间大小为N+1/2的长度,
特点:节省空间,速度慢
M表示字节的长度
SQL:Structured Query Language(结构化查询语言)
DDL:Data Defined Language(数据定义语言)
DML:Data Manipution Language(数据操纵语言)
CRUD(Create,Retrire/Read,Update,Delete)
Insert
Delete
Update
Select
DCL:Data Control Language(数据控制语言)
Grant(授予)、Deny(拒绝)、Revoke(撤销)
DDL
创建、修改、删除数据库
在一个数据库中可以有很多数据对象,其中最常用的是数据表
一个具体的数据库中,包含N个数据表,一个表,由列组成,且
每一列必须指定存放的数据类型。表创建完成后,按照一行想表中插入数据
创建表:
create table tab_name
(列名 类型 约束,
列名 类型 约束,...)character set utf8;
desc tableName;查看表的结构
show tables;查看数据库中的所有表
修改表;如果表中有数据就会错误
alter table tabName add 列名 type; 在数据表中添加一个列
alter table tabName modify 列名 修改后的类型;修改表中的一个列的数据类型
alter table tabName drop 列名; 删除一个列
alter table tabname change 原列名 新列名 type; 对列名的重命名
alter table tabname rename to newTabName; 数据表的重命名
注意:在实际应用当中,一般表建立之后,不会修改表的结构
删除表:
drop table tabName;既删除了表结构而且删除了表中的数据
其他的使用:视图,索引,存储过程
DML:管理数据库中的数据信息,增删改查
mysql中不区分大小写,说的是关键字不区分大小写,一般情况下,关键字全部大写,数据是区分大小写的
insert:insert into TabName(列名,列,...列名) values(值1,值2,...值n);
值必须与列名相对应;如果没有列出全部的列,其他没有对应的值,则这些列以NULL插入
如果表中的所有列都要插入数据,可以在前面不用列出所有的列名,后面的值默认与创建表是,列
的顺序及类型
delete:
delete from 表名;删除一个表中的所有数据
delete from tabName where condition(条件);
condition格式: 列名 运算符 值
逻比较运算符 =、!=/<>、>、>=、<、<=
and 前后两个条件必须成立才为真 or 前后两个条件有一个条件成立即可为真
between ... and..
IN:表示离散的值
NULL:
delete from student where tel is null; 不能用=
NOT:表示取反,相当于否定 可以和其他的(IN between...and... NULL is(在前))一起使用
注意:truncate table tabName;删除表中的数据,属于DDL语言
删除数据表中的数据:
delete from tabName;删除表中的数据,可恢复
truncate table tabName; 删除表中的数据,不可恢复,表结构存在,相当于删除表结构再创建表结构
drop table tabName;删除表,即既是删除表结构删除数据
update:
update tabName set 列名=值,列名=值...;将某列的值修改成指定值
select:
select * from tabName;查询一个表中的所有数据
注意:在增删改查时,当使用字符串类型和日期类型的值时,要用''括起来;
DCL:数据库控制语言,主要是创建用户,管理用户权限
--为数据库创建一个用户 且指定密码,用户只能在该IPAddress上登陆
create user userName@IPAddress identified by 'password'[with grand option];
为用户赋予响应的权限:
常见的哪些权限:create alter drop insert update delete select
确定该用户权限作用范围:某个数据库中的数据对象
grant creat,alter... on databaseName.tabName to userName@IPAddress;
将所有权限赋予某个用户
grand all on databaseName.tabName to userName@IPAddress;
*表示所有数据对象
回收权限revoke (invoke调用)
revoke 权限... on databaseName.*|tabName from userName@IPAddress;
查看某用户的权限:
show grants for userName@IPAddress;
删除某个用户:
drop user userName@IPAddress;
赋予一个用户创建另外一个用户的权限:
grant create user on *.* to userName@'%' with grand option;
修改数据库用户密码
update user set password=password('root') where user='root';
flush privileges;
解决Mysql乱码问题:
查看编码的命令:
show variable like 'char%';
mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
如何不会有乱码?
客户端,client, connection,results,服务器端编码一致
(客户端编码和服务器端编码一致,设置其他三项的编码一致)
set names 编码;(gbk,utf8)
set names gbk相当于以下三句
>set character_set_client=gbk;
>set charavter_set_connection=gbk;
>set character_set_results=gbk;
character_set_client:与client保持一致;
character_set_connection:与数据库保持一致
character_set_result:与客户端保持一致(客户端编码和服务器编码不一致时
>set character_set_client=客户端编码;
>set charavter_set_connection=服务器端编码;
>set character_set_results=客户端编码;
单表查询(select)
查询就是将表中的数据取出,并存放到一个临时表中,并显示
查询表中的所有数据:
select * from tabName;
select 列名,列名... from tabName;
过滤重复行
select distinct 列名 from tabName;
列运算操作:
-- 对数值型的列进行加减乘除运算
null ifnull(列名,值)
--对字符串的连接
concat(列名,列名|字符串...)
--别名
直接在列名的后面写别名或者在列名 as 别名
排序:
查询语句order by 列 ASC|DESC 默认是DESC
ASC:升序 DESC:降序排列
按多列排序:用逗号隔开
条件查询:
where之后只能使用原表中存在的列进行过滤,如何对结果表过滤,此时使用having
模糊查询:
列名 like 条件
% 表示不定数的任意字符 _表示任意一个字符
注意:like 后面的条件是含有通配符的条件表达,如果没有通配符,则like相当于=
聚合函数:
分组:
select 分组列,聚合函数 from 表
group by 列名1,列名2 ...
计算每个部门的人数
select deptno count(empno) from emp group deptno;
除了聚合函数,哪些列可以出现在select之后呢:
分组列,与分组列具有相同结构的也可以
计算每个部门人数,最高工资,最低工资,平均工资 和
select deptno 部门, count(*) 人数,max(sal) 最高工资,min(sal) 最低工资,avg(sal) 平均工资,sum(sal) 工资和 from emp group by deptno;
having语句的使用:
有的时候要对部分分组进行过滤,
having语句能够使用的语法和where几乎是一样的,不过使where的时候要group by子句要
放在其后,而使用having时,group by要位于having之前;其实就是在用聚合函数的时候
把where换成having;
限制结果集行数:
Mysql提供limit关键子来限制返回的结果集,limit放在select语句的最后位置
语法:“limit 首行行号,要返回的结果集的最大数目”
sqlServer 2000提供top关键子来返回结果集中的前n条记录
语法:select top 限制结果集数目 字段列表 其他语句
sqlServer2005 提供窗口函数:row_number()函数可以计算每一行数据在结果集中的
行号(从1开始计数);
语法:row_number() over(排序规则)
查询语句的结构:
select 列...,聚合函数
from 表1,表2,...,表的连接
[where condition] 表示对表中每一行数据进行过滤
[group by 列1...] 按照指定的列进行分组
[having condition]对分组后的数据进行条件过滤
[order by 列,别名]
[limit start_index,offset]
完整性约束:
主键约束:用于唯一表示表中的一行数据的。不能重复和为null
primary key
自增长约束:标识某一列的值可以自动增长,一般为int类型的主键列
auto_increment
非空约束: 不为null,在插入数据的时候不能为空
not null;
唯一约束:表示该列所有的值不能重复,但只能有一个null
unique
check约束:限定范围
age列使用check约束(18,24)。
外键约束:某列的取值必须从另一个表中的此列中取得
foreign key 外键字段 r7eferences 外键表名 (外键表的主键字段)
constraint fk_tno foregin key (tno) reference teacher (tno);
一个表中的外键一般与另一个表中的主键对应,常常列名是相同的
主键是不为null且不重复的,外键可以为null也可以重复
默认值:
default 值
数据处理函数:
计算字符串的长度,length()这个函数接收一个字符串类型的字段值作为参数,返回
该字符串的长度
取得字符串的子串的函数:substring(参数1,参数2,参数3)
第一个参数是要取的主字符串,第二个参数为字符串的起始位置(从1开始),第三个参数为子串的长度
多个函数还可以嵌套使用,主流系统都提供了计算正弦值的函数sin和计算绝对值的函数abs,
他们都接收一个数值类型的参数
表连接:、
sql使用join关键字来进行表连接,
表连接有多种不同的类型:
被主流数据库支持的有交叉连接(cross join)、内连接(inner join)、
外连接(outter join)、另外有的数据库还支持联合连接
(union join)
内连接:组合两张表,并基于两张表中的关联关系来连接他们。使用内连接需要指定表中的
哪些字段组成关联关系,并且需要指定基于什么条件的进行连接
语法:inner join table_name ON condition
其中table_name为被关联的表名,condition是进行连接时的条件
不等值连接:
多表查询:
一般情况下,多表查询表与表之间会存在一定逻辑关系。最直接的就是主外键关系
普通多表查询:
select 列1... from 表1,表2...
where condition
...
在from之后可以有很多表,每个表之间用,隔开,from后面的表会做笛卡尔积
表与表之间做笛卡尔积,然后就能查询出来了
内连接:
select 列
from 表1 别名 inner join 表2 别名 on 表1.列=表2.列,...
condition...
from开始,表1与表2进行笛卡尔积,每匹配一行的数据,就会通过on后条件判断
是否成立,就将该行匹配的信息存放到临时表,否则不存放
外连接:
左外连接:左表中所有的记录都会被放到结果集中,无论是否在右表是否存在匹配记录
语法:select 列
from 表1 left outer join 表2 on 表1.列=表2.列
[left outer join 表3 on...]
右外连接:不管是否成功匹配连接条件都会返回右表中的所有记录
语法: select 列
from 表1 right outer join 表2 on 表1.列=表2.列
[left outer join 表3 on...]
全外连接:(在mysql中没有全外连接,可以使用union实现
即是select...左连接 union select ... 右连接...
表1 full outer join 表2 on ...
自连接:
一张表与自己进行连接,
select 列..
from 表1 别名,表1 别名2
where...
...
select e1.empno,e1.ename,e1.mgr e2.empno,e2.ename
from emp e1,emp e2
where e1.empno = e2.mgr;
ex:查找每个员工的直接上级领导的姓名:
select ifnull(e1.ename,'boss') 领导,e2.ename
from emp e1 right outer join emp e2 on e1.empno=e2.mgr;
子连接:
在查询中还可以有查询。外查询叫主查询,内部的叫子查询
子查询先运行,子查询的结果作为主查询的值使用
--子查询返回单个值 =
--子查询返回多行一列 in
--子查询返回一行多列 (,)in(,)
--子查询返回多行多列 将条件一个一个拆开,然后将子查询得到的表在进行连接
连接之后可按下一步的条件进行查询,以此类推下去即可得到
符合条件的结果。在条件拆分的时候就是要月简单越好,并且
条件之间有相应的关系,最好是包含的关系,这样查询出来的
结果肯定是没有错的,并且在逻辑上也是很通的。也就各种子查询
并列或者是一个是另一个的子查询。
MYSQL数据库的备份与还原:
mysql数据的备份:
不登陆mysql
>mysqldump -uuseName -ppassword databaseName >./hao.sql
到处数据库中的表结构及表中的数据 ,不包含该数据库
mysql数据库的还原:
还原此种方式备份的数据时,必须在该数据库服务器中创建一个数据库
并指定
第一种,不登陆mysql
>mysql -uuserName -ppassword databaseName < ./hao.sql;
第二种:登陆mysql :
mysql>use databaseName;
mysql>source ./hao.sql
windows
字符集的说明:
Mysql安装的时候是 :
windows是GBK gb2312;
Linux是utf8;
环境变量:
软盘和软驱:
ab两个盘符一直没用是为软盘和软驱的纪念;
安装的文件的目录:
bin:binary里面绝大部分是命令,可执行的二进制文件
Mysql的安装结构:
bin
data: 包含数据库的数据:表,视图,索引。。。
my.ini:配置文件,mysql启动的时候读取配置文件
登陆数据库:
>mysql -u userName -p [-h ip]
>password:pwd
mysql>
注意: -u user
-p password
-h hostname Mysql服务器的ip地址
第二种>mysql -uuserName -ppassword [-hip]
数据库列数据类型:
整数类型:
bit(M)
tinyint 1B
int(M) 4B 默认显示十一位整数
浮点数类型:
float(M,D) 4B 单精度
double(M,D)
以上两个是浮点型小数
decimal(M,D)
M除小数点之外的位数 D小数点后的位数
decimal(7,3) 1234.567 numberic(M,D)
decimal(4),表示整数 不用decimal(4,0)
日期/时间类型:
date 4B 支持范围:1000-01-01到9999-12-31
datetime 8B 时间和日期的组合
timestamp 4B 时间戳
year
字符串类型
char(M) 定长 如果存放的数据字节数<=M 此时在内存中所占的空间还是M
特点:可能浪费存储空间,速度,比如表示性别,四字成语,手机号,身份证号
varchar(M)变长 vary(variable) character 如果存放的数据字节数N<=M,此时真正存放的空间大小为N+1/2的长度,
特点:节省空间,速度慢
M表示字节的长度
SQL:Structured Query Language(结构化查询语言)
DDL:Data Defined Language(数据定义语言)
DML:Data Manipution Language(数据操纵语言)
CRUD(Create,Retrire/Read,Update,Delete)
Insert
Delete
Update
Select
DCL:Data Control Language(数据控制语言)
Grant(授予)、Deny(拒绝)、Revoke(撤销)
DDL
创建、修改、删除数据库
在一个数据库中可以有很多数据对象,其中最常用的是数据表
一个具体的数据库中,包含N个数据表,一个表,由列组成,且
每一列必须指定存放的数据类型。表创建完成后,按照一行想表中插入数据
创建表:
create table tab_name
(列名 类型 约束,
列名 类型 约束,...)character set utf8;
desc tableName;查看表的结构
show tables;查看数据库中的所有表
修改表;如果表中有数据就会错误
alter table tabName add 列名 type; 在数据表中添加一个列
alter table tabName modify 列名 修改后的类型;修改表中的一个列的数据类型
alter table tabName drop 列名; 删除一个列
alter table tabname change 原列名 新列名 type; 对列名的重命名
alter table tabname rename to newTabName; 数据表的重命名
注意:在实际应用当中,一般表建立之后,不会修改表的结构
删除表:
drop table tabName;既删除了表结构而且删除了表中的数据
其他的使用:视图,索引,存储过程
DML:管理数据库中的数据信息,增删改查
mysql中不区分大小写,说的是关键字不区分大小写,一般情况下,关键字全部大写,数据是区分大小写的
insert:insert into TabName(列名,列,...列名) values(值1,值2,...值n);
值必须与列名相对应;如果没有列出全部的列,其他没有对应的值,则这些列以NULL插入
如果表中的所有列都要插入数据,可以在前面不用列出所有的列名,后面的值默认与创建表是,列
的顺序及类型
delete:
delete from 表名;删除一个表中的所有数据
delete from tabName where condition(条件);
condition格式: 列名 运算符 值
逻比较运算符 =、!=/<>、>、>=、<、<=
and 前后两个条件必须成立才为真 or 前后两个条件有一个条件成立即可为真
between ... and..
IN:表示离散的值
NULL:
delete from student where tel is null; 不能用=
NOT:表示取反,相当于否定 可以和其他的(IN between...and... NULL is(在前))一起使用
注意:truncate table tabName;删除表中的数据,属于DDL语言
删除数据表中的数据:
delete from tabName;删除表中的数据,可恢复
truncate table tabName; 删除表中的数据,不可恢复,表结构存在,相当于删除表结构再创建表结构
drop table tabName;删除表,即既是删除表结构删除数据
update:
update tabName set 列名=值,列名=值...;将某列的值修改成指定值
select:
select * from tabName;查询一个表中的所有数据
注意:在增删改查时,当使用字符串类型和日期类型的值时,要用''括起来;
DCL:数据库控制语言,主要是创建用户,管理用户权限
--为数据库创建一个用户 且指定密码,用户只能在该IPAddress上登陆
create user userName@IPAddress identified by 'password'[with grand option];
为用户赋予响应的权限:
常见的哪些权限:create alter drop insert update delete select
确定该用户权限作用范围:某个数据库中的数据对象
grant creat,alter... on databaseName.tabName to userName@IPAddress;
将所有权限赋予某个用户
grand all on databaseName.tabName to userName@IPAddress;
*表示所有数据对象
回收权限revoke (invoke调用)
revoke 权限... on databaseName.*|tabName from userName@IPAddress;
查看某用户的权限:
show grants for userName@IPAddress;
删除某个用户:
drop user userName@IPAddress;
赋予一个用户创建另外一个用户的权限:
grant create user on *.* to userName@'%' with grand option;
修改数据库用户密码
update user set password=password('root') where user='root';
flush privileges;
解决Mysql乱码问题:
查看编码的命令:
show variable like 'char%';
mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
如何不会有乱码?
客户端,client, connection,results,服务器端编码一致
(客户端编码和服务器端编码一致,设置其他三项的编码一致)
set names 编码;(gbk,utf8)
set names gbk相当于以下三句
>set character_set_client=gbk;
>set charavter_set_connection=gbk;
>set character_set_results=gbk;
character_set_client:与client保持一致;
character_set_connection:与数据库保持一致
character_set_result:与客户端保持一致(客户端编码和服务器编码不一致时
>set character_set_client=客户端编码;
>set charavter_set_connection=服务器端编码;
>set character_set_results=客户端编码;
单表查询(select)
查询就是将表中的数据取出,并存放到一个临时表中,并显示
查询表中的所有数据:
select * from tabName;
select 列名,列名... from tabName;
过滤重复行
select distinct 列名 from tabName;
列运算操作:
-- 对数值型的列进行加减乘除运算
null ifnull(列名,值)
--对字符串的连接
concat(列名,列名|字符串...)
--别名
直接在列名的后面写别名或者在列名 as 别名
排序:
查询语句order by 列 ASC|DESC 默认是DESC
ASC:升序 DESC:降序排列
按多列排序:用逗号隔开
条件查询:
where之后只能使用原表中存在的列进行过滤,如何对结果表过滤,此时使用having
模糊查询:
列名 like 条件
% 表示不定数的任意字符 _表示任意一个字符
注意:like 后面的条件是含有通配符的条件表达,如果没有通配符,则like相当于=
聚合函数:
分组:
select 分组列,聚合函数 from 表
group by 列名1,列名2 ...
计算每个部门的人数
select deptno count(empno) from emp group deptno;
除了聚合函数,哪些列可以出现在select之后呢:
分组列,与分组列具有相同结构的也可以
计算每个部门人数,最高工资,最低工资,平均工资 和
select deptno 部门, count(*) 人数,max(sal) 最高工资,min(sal) 最低工资,avg(sal) 平均工资,sum(sal) 工资和 from emp group by deptno;
having语句的使用:
有的时候要对部分分组进行过滤,
having语句能够使用的语法和where几乎是一样的,不过使where的时候要group by子句要
放在其后,而使用having时,group by要位于having之前;其实就是在用聚合函数的时候
把where换成having;
限制结果集行数:
Mysql提供limit关键子来限制返回的结果集,limit放在select语句的最后位置
语法:“limit 首行行号,要返回的结果集的最大数目”
sqlServer 2000提供top关键子来返回结果集中的前n条记录
语法:select top 限制结果集数目 字段列表 其他语句
sqlServer2005 提供窗口函数:row_number()函数可以计算每一行数据在结果集中的
行号(从1开始计数);
语法:row_number() over(排序规则)
查询语句的结构:
select 列...,聚合函数
from 表1,表2,...,表的连接
[where condition] 表示对表中每一行数据进行过滤
[group by 列1...] 按照指定的列进行分组
[having condition]对分组后的数据进行条件过滤
[order by 列,别名]
[limit start_index,offset]
完整性约束:
主键约束:用于唯一表示表中的一行数据的。不能重复和为null
primary key
自增长约束:标识某一列的值可以自动增长,一般为int类型的主键列
auto_increment
非空约束: 不为null,在插入数据的时候不能为空
not null;
唯一约束:表示该列所有的值不能重复,但只能有一个null
unique
check约束:限定范围
age列使用check约束(18,24)。
外键约束:某列的取值必须从另一个表中的此列中取得
foreign key 外键字段 r7eferences 外键表名 (外键表的主键字段)
constraint fk_tno foregin key (tno) reference teacher (tno);
一个表中的外键一般与另一个表中的主键对应,常常列名是相同的
主键是不为null且不重复的,外键可以为null也可以重复
默认值:
default 值
数据处理函数:
计算字符串的长度,length()这个函数接收一个字符串类型的字段值作为参数,返回
该字符串的长度
取得字符串的子串的函数:substring(参数1,参数2,参数3)
第一个参数是要取的主字符串,第二个参数为字符串的起始位置(从1开始),第三个参数为子串的长度
多个函数还可以嵌套使用,主流系统都提供了计算正弦值的函数sin和计算绝对值的函数abs,
他们都接收一个数值类型的参数
表连接:、
sql使用join关键字来进行表连接,
表连接有多种不同的类型:
被主流数据库支持的有交叉连接(cross join)、内连接(inner join)、
外连接(outter join)、另外有的数据库还支持联合连接
(union join)
内连接:组合两张表,并基于两张表中的关联关系来连接他们。使用内连接需要指定表中的
哪些字段组成关联关系,并且需要指定基于什么条件的进行连接
语法:inner join table_name ON condition
其中table_name为被关联的表名,condition是进行连接时的条件
不等值连接:
多表查询:
一般情况下,多表查询表与表之间会存在一定逻辑关系。最直接的就是主外键关系
普通多表查询:
select 列1... from 表1,表2...
where condition
...
在from之后可以有很多表,每个表之间用,隔开,from后面的表会做笛卡尔积
表与表之间做笛卡尔积,然后就能查询出来了
内连接:
select 列
from 表1 别名 inner join 表2 别名 on 表1.列=表2.列,...
condition...
from开始,表1与表2进行笛卡尔积,每匹配一行的数据,就会通过on后条件判断
是否成立,就将该行匹配的信息存放到临时表,否则不存放
外连接:
左外连接:左表中所有的记录都会被放到结果集中,无论是否在右表是否存在匹配记录
语法:select 列
from 表1 left outer join 表2 on 表1.列=表2.列
[left outer join 表3 on...]
右外连接:不管是否成功匹配连接条件都会返回右表中的所有记录
语法: select 列
from 表1 right outer join 表2 on 表1.列=表2.列
[left outer join 表3 on...]
全外连接:(在mysql中没有全外连接,可以使用union实现
即是select...左连接 union select ... 右连接...
表1 full outer join 表2 on ...
自连接:
一张表与自己进行连接,
select 列..
from 表1 别名,表1 别名2
where...
...
select e1.empno,e1.ename,e1.mgr e2.empno,e2.ename
from emp e1,emp e2
where e1.empno = e2.mgr;
ex:查找每个员工的直接上级领导的姓名:
select ifnull(e1.ename,'boss') 领导,e2.ename
from emp e1 right outer join emp e2 on e1.empno=e2.mgr;
子连接:
在查询中还可以有查询。外查询叫主查询,内部的叫子查询
子查询先运行,子查询的结果作为主查询的值使用
--子查询返回单个值 =
--子查询返回多行一列 in
--子查询返回一行多列 (,)in(,)
--子查询返回多行多列 将条件一个一个拆开,然后将子查询得到的表在进行连接
连接之后可按下一步的条件进行查询,以此类推下去即可得到
符合条件的结果。在条件拆分的时候就是要月简单越好,并且
条件之间有相应的关系,最好是包含的关系,这样查询出来的
结果肯定是没有错的,并且在逻辑上也是很通的。也就各种子查询
并列或者是一个是另一个的子查询。
MYSQL数据库的备份与还原:
mysql数据的备份:
不登陆mysql
>mysqldump -uuseName -ppassword databaseName >./hao.sql
到处数据库中的表结构及表中的数据 ,不包含该数据库
mysql数据库的还原:
还原此种方式备份的数据时,必须在该数据库服务器中创建一个数据库
并指定
第一种,不登陆mysql
>mysql -uuserName -ppassword databaseName < ./hao.sql;
第二种:登陆mysql :
mysql>use databaseName;
mysql>source ./hao.sql
相关文章推荐
- 集群LVS 实现数据共享
- mysql常用字符串操作函数大全,以及实例
- mysql主从复制之已存在的库
- mysql备份
- MySQL之事务&隔离级别&死锁
- 如何正确选择MySQL数据列类型
- MySQL字段类型详解
- mysql的四种启动方式
- mysql 递归查询的方法
- lampp 修改MySQL数据库存储路径
- 利用mysql对特殊字符和超长字符会进行截断的特性 进行存储型XSS攻击——WordPress <4.1.2 & <=4.2 存储型xss
- mysql定义和调用存储过程
- mysql innodb 性能优化
- 查看MySQL的警告信息
- MySQL之Master-Master配置
- mysql创建/删除表的例子
- log4net引用了Mysql.Data.dll,但是就是不能写到mysql数据库的解决办法
- MySql视图原理讲解与使用大全
- MySQL 错误1418 的原因分析及解决方法
- mysql aaa.123abc.com要换成aaa.123.net