码迷,mamicode.com
首页 > 数据库 > 详细

mysql常用语句

时间:2016-12-14 02:54:31      阅读:356      评论:0      收藏:0      [点我收藏+]

标签:databases   用户名   数据库表   insert   create   

DDL (数据定义问题)

数据定义语言 - Data Definition Language

用来定义数据库的对象,如数据表、视图、索引等

DML  (数据操纵问题)

数据处理语言 - Data Manipulation Language

在数据库表中更新,增加和删除记录

如 update, insert, delete

DCL (数据控制问题)

数据控制语言 – Data Control Language

指用于设置用户权限和控制事务语句

如grant,revoke,if…else,while,begin transaction

DQL (数据查询问题)

数据查询语言 – Data Query Language

select

=====================================================

登陆:

mysql (-h 连接的主机ip -P端口3306)-u 用户名 -p 密码---( 连接本机: 省略 -h 和 -P  主机和端口。)

查询当前的所有库

show databases;

查询当前数据的创建方式:查看数据的编码表

show create database 库名;

创建库

create database 数据库名   由于创建数据库时没有指定编码表,因此会使用安装数据库时默认的编码表

create database 数据库名 character set 编码表名; 创建数据库会使用指定的编码表

create database 数据库名 character set 编码表名 collate 排序规则; 使用指定的编码表同时还可以根据编码表指定排序规则

删除数据库

drop database 数据库名

修改数据库编码集

alter database 数据库名称 character set collate 比较规则

切换数据库和查看正在使用的数据

use 数据库名

show database();

============================================

创建数据表

create table 表名(列名 类型(长度) 约束)

create table employee2(

   id int primary key auto_increment,  当前这一列是主键

   name varchar(32)  not null ,  //不能为null

   sex varchar(10),

   password varchar(32) unique not null,  

   birthday date

);

查看创建的表的结构

desc 表名

数据表结构的修改

alter table 表名 增/删/改  列名 类型(长度)约束

1、增加列:

alter table 表名 add 列名 类型(长度) 约束

2、修改现有的列:

alter table 表名 modify 列名 类型(长度)约束

3、修改现有列的名称

alter table 表名 change 旧列名 新列名 类型(长度)约束

4、删除现有的列

alter table 表名 drop 列名

5、修改表名

rename table 旧列名 to 新列名

6、修改表的字符集

alter table 表名 character set utf8;

数据表的删除

drop table 表名

查看当前库中有多少表

show tables;

查看表的结构

desc table 表名

查看表的编码

show create table 表名

==================================================

数据表的增删改查

向数据表中插入数据

insert into 表名(列名1,...)values (值1,。。);(当值全都要写时,列名可以省略)

修改数据记录

update 表名 set 列名=值,。。。。where 条件语句

注意:一般在修改数据表中的数据时,都需要加条件,而不能直接修改表中的某一列的所有值。

update person set username=’王五’,password=‘123‘ where id =3;

删除数据表记录

delete from 表名 where 条件语句

删除所有

delete from person;

查询数据表中的所有记录

select * from 表名

查询指定列记录

select 列名,列名... form 表名 where条件语句

========运算符=====================================

相等=        不等 <> 

2) 区间:between  ...and... 在两者之间取值 between 70 and 80 

    等价于 >=70 <=80    注意前面那个数要比后面那个数要小 

sage >=24 and sage<=50  between 24 and 50

in(值,值,值) 在指定值中任取一个 in(70,80,90) 值可以是70、80或者90 

where 列名 in (值,值,值.......);

where 列名=值 or 列名=值 or 列名=值 .......

like ‘模糊查询pattern‘ 进行模糊查询 ,表达式有两个占位符 % 任意字符串 _ 任意单个字符 

例如: name like ‘张%‘ 所有姓张学员   %张%

   name like ‘张_‘ 所有姓张名字为两个字学员 _张_

5) is null 判断该列值为空

sql中对伊null的判断,不能写 = null   在sql 中 null = null 结果不成立。

不是null  : is not null

6) and 逻辑与 or 逻辑或 not 逻辑非 

================================================

对查询的结果进行排序:

使用order by 

select * from 表名 order by 列名 asc|desc;

可以对查询出来的列名 起别名。

select 列名 as 别名,列名 as 别名,列名 as 别名.... from 表名 where 条件;

SQL 中的函数:

SQL语言中定义了部分的函数,可以帮助我们完成对查询结果的计算操作:

count 统计个数

sum函数:求和

avg函数:求平均值

max、min 求最大值和最小值

使用group by 对列进行分组

select 列名 from 表名 group by product;

注意:

where和having 都可以完成数据的条件书写。但是having后面可以跟上述的函数。

========================================

7、MySQL 数据库的备份和恢复

7.1、备份命令

在mysql的安装目录的bin目录下有mysqldump命令,可以完成对数据库的备份。

语法:mysqldump -u 用户名 -p 数据库名 > 磁盘SQL文件路径 

mysqldump -u root -p mydb3 > c:\mydb3.sql

由于mysqldump命令不是sql命令,需要在dos窗口下使用。

恢复数据,需要手动的先创建数据库:

create database mybd3;

mysql -u root -p mybd3 <c:\mydb2.sql

====多表查询============================================

1.笛卡尔积

笛卡尔积问题:把多张表放在一起,同时去查询,会得到一个结果

,而这结果并不是我们想要的数据,但这个结果成为笛卡尔积。

select * from a,b;

---------------------------------------------------------

[多表查询必须要写的内容:(比如有两张表emp.dept)

select 

from emp,dept

where emp.id=dept.id and……;

上面这种写法就可以过滤掉笛卡尔积中的冗余的信息(其中id是两张表的共有属性信息)

]

---------------------------------------------------------

2.内连接查询(自连接(自己跟自己连----可以给同一张表分别取一个别名来区分:

emp as worker ,emp as manager))

一般用的比较少,可以用单表中的子查询进行替代,但是内链接的效率更高一些!

方式一:select 列名 , 列名 .... from 表名1,表名2 where 表名1.列名 = 表名2.列名;

方式二:select * from 表名 inner join 表名 on 条件 

3.外连接查询

外链接:左外连接、右外连接、全连接、自连接。

左外连接:

用左边表去右边表中查询对应记录,不管是否找到,都将显示左边表中全部记录。

语法:select * from 表1 left outer join 表2 on 条件;

右外连接:

用右边表去左边表查询对应记录,不管是否找到,右边表全部记录都将显示

语法:select * from 表1 right outer join 表2 on 条件;

全连接:

全外连接:

左外连接和右外连接的结果合并,但会去掉重复的记录。

select * from 表1 full outer join 表2 on 条件

select * from a full outer join b on a.A_ID = b.A_ID; 但是mysql数据库不支持此语法。

在sql语句全连接,其实就是左外链接和右外连接之和,去掉重复的数据。这时可以使用union

SQL 关联子查询

子查询:把一个sql的查询结果作为另外一个查询的参数存在。

关联子查询其他的关键字使用:

in和exists:

in 表示条件应该是在多个列表中。

in:使用在where后面,经常表示是一个列表中的数据,只要被查询的数据在这个列表中存在即可。

exists:

exists:表示存在,当子查询的结果存在,就会显示主查询中的所有数据。

all、any和some的使用法

all 需要和 union 一起使用,如果在查询时, 单独使用union 可以把多个查询的结果进行合并, 会过滤掉重复的数据。如果union  all 只会简单的把多个查询结果合并。

any 和 some用法一致:

SOME 是 SQL-92标准的ANY的等效物

any和some是没有区别的,some和any 效果一样 ,代表一部分记录。

any部分数据 >any(1,2,3)  等价于 min(1,2,3) 

all 所有数据 >all(1,2,3)   等价于 max(1,2,3)

1、查询最高分:

studentcource  找到最高分

select max(score) fromstudentcource  ;

2、需要从studentcource  表中查出 最高分对应的学生id

select student_id from studentcource  where score = ( select max(score) fromstudentcource );

select student_id from studentcource where score  >  all(  select score from studentcource  );

3、根据学生的id到student表中找出学生信息

select * from student where id in( select student_id from studentcource  where score = ( select max(score) from studentcource ) );

select * from student where id in( select student_id from studentcource where score  >= all(  select score from studentcource  ));

查询编号2课程比编号1课程成绩高所有学生信息:

1、编号2  和编号1 的课程成绩:

 select score from studentcource where cource_id = 1 or cource_id = 2;

2、查找出编号2 比 编号1 成绩高的学生id

找出编号1的成绩的最高分

select score from student where cource_id = 1;

使用子查询的结果,我们可以把它当做一个临时表存在,然后在从其中找出需要的结果:

select max(temp.score)  from   (select score from studentcource where cource_id = 1) as temp;

找出编号2 的成绩高于 编号 1 的  学生id

select student_id from studentcource where cource_id = 2 and score > ( select max(score) from studentcource where cource_id = 1 );

select student_id from studentcource where cource_id = 2 and score > all( select score from studentcource where cource_id = 1 );

select * from student where id in ( select student_id from studentcource where cource_id = 2 and score > all( select score from studentcource where cource_id = 1 ) );

额外附加:

思考,需要查询编号2课程比编号1课程成绩高所有学生信息 ,同时列出学生的成绩。

如果数据来自多张表,这时需要把不同的表进行连接查询。

思路:需要把student 表 和 studentcource 表中的 成绩现实。

select * from student ,( select score ,student_id from studentcource where cource_id = 2 and score > all( select score from studentcource where cource_id = 1 ) )as temp  where student.id = temp.student_id ;

2.5、mysql的自带函数

msyql数据库中自带了一些函数。在我们使用sql语句操作mysql数据库的时候,可以直接使用这些函数。

===========一对多的表设计================================================================

=================多对多之表的设计原则=====================================

1、在任意一方添加外键都失败,要设计中间表。

2、创建顺序,先创建“父表”。

3、创建中间表

4、外键约束

5、采用联合主键(一组值不能出现两次)。

=======================================================

一般是在先创建完父表之后再建立表之间的关系。如下:

create table if not exists orders(

id int primary key auto_increment,

name varchar(20),

info varchar(100)

);

create table if not exists products(

 id int primary key auto_increment,

 name varchar(20),

 price double(10.2)

);

create table if not exists orders_products(

oid int, --订单主键

pid int,---商品主键

buynum int --一张订单商品购买数量

primary key(oid,pid)--联合主键

);

--添加主键

====================================================================================

alter table orders_products add constraint orders_products_orders_fk foreign key(oid) reference orders(id);

alter table orders_products add constraint orders_products_products_fk foreign key(pid) reference products(id);

/*

还有一种就是在见表的的时候就建立关系了:

如在多方(直接在最后书写):

constraint user_orders_fk foreign key(uid) reference user(id);

*/

===================================================

在一对多的情况下,删除表的时候,先删除多的一方,再,删除一方,否则删除了表。

=========================================================================

=======================================================


本文出自 “SimpleLife” 博客,请务必保留此出处http://simplelife.blog.51cto.com/9954761/1882329

mysql常用语句

标签:databases   用户名   数据库表   insert   create   

原文地址:http://simplelife.blog.51cto.com/9954761/1882329

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!