SQL 语法

来源:互联网 发布:16欧文总决赛数据统计 编辑:程序博客网 时间:2024/05/17 16:57


备份恢复数据

备份:

备份数据到sql文件:在cmd窗口下,执行mysqldump -u root -p mydb2>c:/1.sql

恢复:

// 方式一:首先创建出数据库,退出到cmd窗口下,执行mysql -u root -p mydb2<c:/1.sql
// 方式二:首先创建出数据库,进入数据库,执行source c:/1.sql

数据库编码设置

E:\software\file\MySql5.0\my.ini  (一共改两个地方)



数据库操作

添加数据库

 create database mydb1

创建数据库 并设置数据库编码为utf8
// create database mydb1 character set utf8;

 查看创建数据库的语句(可以查看创建数据库时的资料)
// show create database mydb1;

 查看所有的数据库
// show databases

 删除数据库
// drop database mydb1;

 修改数据库
// alter database db_name character set utf8

 进入数据库
// use mydb1;

 查看当前使用的数据库
// select database;


//客户端发送请求,通知数据库服务器端编码方式

set names utf-8


表操作:

创建数据表
create table employee(
id int primary key auto_increment ,
name varchar(20),
gender bit default 1,
birthday date,
entry_date date,
job varchar(20),
salary double,
resume text
);

表约束:

primary key
unique
not null
auto_increment 主键字段必须是数字类型。


查询数据表
desc tab_name 查看表结构
show tables 查看当前数据库中的所有的表
show create table tab_name 查看当前数据库表建表语句


 删除表结束
 drop table tab_name;


 修改表结构
(1)增加一列
alter table tab_name add [column] 列名 类型;
(2)修改一列类型
alter table tab_name modify 列名 类型;
(3)修改列名
alter table tab_name change [column] 列名 新列名 类型;
(4)删除一列
alter table tab_name drop [column] 列名;
(5)修改表名
rename table 表名 to 新表名;
(6)修该表所用的字符集
alter table student character set utf8;


数据操作

常用数据类型

TINYINT

SMALLINT,

MEDIUMINT,

INT 

BIGINT


CHAR 0-255字节 定长字符串
VARCHAR 0-255字节 变长字符串 


TINYBLOB 0-255字节 不超过 255 个字符的二进制字符串 

BLOB 0-65 535字节 二进制形式的长文本数据

MEDIUMBLOB 0-16 777 215字节 二进制形式的中等长度文本数据 

LOGNGBLOB 0-4 294 967 295字节 二进制形式的极大文本数据 


TINYTEXT 0-255字节 短文本字符串 

TEXT 0-65 535字节 长文本数据

MEDIUMTEXT 0-16 777 215字节 中等长度文本数据 

LONGTEXT 0-4 294 967 295字节 极大文本数据 




  添加数据
insert into employee(name,birthday,entry_date,job,salary) values ('张飞','1990-09-09','2000-01-01','打手',999);
insert into employee values ('张飞','1990-09-09','2000-01-01','打手',999);
insert into dept values (null,'财务部'),(null,'人事部'),(null,'科技部'),(null,'销售部');
修改数据
update tab_name set field1=value1
3.删除表操作
delete from emp where name='黄忠';
3.删除表操作
truncate table emp;


查询数据

(1)基本查询

 select name,english from exam;

 (2)查询过程中使用表达式
select name,english+10,chinese+10,math+10 from exam;
select name as 姓名,english+math+chinese as 总成绩 from exam;
select name 姓名,english+math+chinese 总成绩 from exam;

 (3)使用where子句,进行过滤查询
select * from exam where name like '张%';
select * from exam where name like '张__';
select * from exam where math in (75,76,77);
select * from exam where english between 80 and 100;
select name 姓名,english+math+chinese 总分 from exam where english+math+chinese>230;

 (4)排序查询
select name 姓名,chinese+math+english 总分 from exam where name like '张%' order by 总分 desc;
select name ,chinese from exam order by chinese desc;
1.count函数 -- 用来统计某一列的行的个数
~统计一个班级共有多少学生?
select count(*) from exam;
~统计数学成绩大于70的学生有多少个?
select count(*) from exam where math>70;
~统计总分大于230的人数有多少?
select count(*) from exam where math+english+chinese>230;
2.Sum函数返回满足where条件的行的和
~统计一个班级数学总成绩?
select sum(math) from exam;
~统计一个班级语文、英语、数学各科的总成绩
select sum(math),sum(english),sum(chinese) from exam;
~统计一个班级语文、英语、数学的成绩总和
select sum(ifnull(math,0)+ifnull(english,0)+ifnull(chinese,0)) from exam;
~统计一个班级语文成绩平均分
select sum(chinese)/count(*) from exam;

 3.AVG函数返回满足where条件的一列的平均值
  ~求一个班级数学平均分?
  select avg(math) from exam;
  ~求一个班级总分平均分?
  select avg(ifnull(math,0)+ifnull(english,0)+ifnull(chinese,0)) from exam;
4.Max/min函数返回满足where条件的一列的最大/最小值
  ~求班级最高分和最低分(数值范围在统计中特别有用)
  select max(ifnull(math,0)+ifnull(english,0)+ifnull(chinese,0)) from exam;
  select min(ifnull(math,0)+ifnull(english,0)+ifnull(chinese,0)) from exam


SQL语句顺序

  ~!!!!SQL语句的书写顺序:
select from where groupby having orderby
~!!!!SQL语句的执行顺序:
from where select group by having order by

(2)内连接查询,只将两张表中都有对应记录的记录查询出来:
select * from dept,emp where emp.dept_id = dept.id;
select * from dept inner join emp on emp.dept_id=dept.id

(3)左外连接查询:在内连接的基础上增加左边表有而右边表没有的记录
select * from dept left join emp on emp.dept_id=dept.id;
(4)右外连接查询:在内连接的基础上增加右边表有而左边表没有的记录
select * from dept right join emp on emp.dept_id=dept.id;

 (5)全外连接查询:在内连接的基础上增加左边表有而右边表没有的记录和右边表有而左边表没有的记录
select * from dept full join emp on emp.dept_id=dept.id; -- mysql不支持
select * from dept left join emp on emp.dept_id=dept.id
union
select * from dept right join emp on emp.dept_id=dept.id;














原创粉丝点击