SQL 入门
来源:互联网 发布:aspen plus软件 编辑:程序博客网 时间:2024/05/01 17:03
数据库服务器、数据库和表的关系
装好mysql,只是装好了一个数据库管理程序,要想通过这个程序保存数据,需要在这个程序下创建多 个库来保存(一般开发人员会针对每一个应用创建一个数据库)。而库又是使用表保存数据的,所以库创 建好后,我们又会在数据库下面创建多个表,以保存程序中不 同实体的数据。
注:以下 [ ]中的内容可写可不写。
创建数据库
CREATE DATABASE [IF NOT EXISTS] db_name [create_specification[,create_specification] ...]
[IF NOT EXISTS]:写上后,如果数据库存在就不创建了,不写如果存在就报错。
reate_specification:库的细节,分为:
CHARACTER SET:指定数据库采用的字符集,注:虽然在安装的时候配置了码表,但是这里一定要 指定,由于这个库可能还在别的环境下运行。
COLLATE:指定数据库字符集的比较方式,排序规则,一般默认。
eg:1、创建一个名称为mydb1的数据库
create database mydb1;
show databases; 查看创建的库有没有成功
2、创建一个使用utf-8字符集的mydb2数据库。
createdatabase mydb2 character set utf8; 注:是utf8不是utf-8
3、创建一个使用utf-8字符集,并带校对规则的mydb3数据库。
createdatabase mydb3 character set utf8 collate utf8_general_ci;
4、查看前面创建的mydb2数据库的定义信息
show create database mydb2;
查看、删除数据库
显示数据库语句:SHOW DATABASES
显示数据库创建语句:SHOW CREATE DATABASE db_name
数据库删除语句:DROP DATABASE [IF EXISTS] db_name
eg:1、查看所以库
showdatabases;
2、查看前面创建的mydb1数据库的定义信息
show create database mydb1;
3、删除前面创建的mydb1数据库
drop database mydb1;
修改数据库
ALTER DATABASE [IF NOT EXISTS] db_name [alter_specification [,alter_specification] ...]
[IF NOT EXISTS]:写上后,如果数据库存在就不创建了,不写如果存在就报错。
reate_specification:库的细节,分为:
CHARACTER SET:指定数据库采用的字符集。
COLLATE:指定数据库字符集的比较方式,排序规则,一般默认。
eg:查看服务器中的数据库,并把其中某一个库的字符集修改为gb2312;
alter database mydb2 character set gb2312;
备份数据库
备份数据库表中的数据(window命令:要启动命令行指定,不在mysqL中执行)
mysqldump -u 用户名 -p数据库名 >文件名.sql
eg:对mydb1作备份操作,启动一个window命令行窗口,执行如下命令
mysqldump -uroot -p mydb1>c:\ mydb1.sql 注意没有“;”
>表示数据库进文件
恢复数据库
方式一:Source 文件名.sql
恢复数据库只能恢复数据,不能恢复库,因此要先创建库。
eg:createdatabase mydb1;
use mydb1; 首先进到库中
source c:\ mydb1.sql
方式二:(window命令)
eg:createdatabase mydb1;
mysql -uroot -proot mydb1<c:\ mydb1.sql; <表示文件进数据库
创建表
CREATE TABLE table_name
(
field1 datatype,
field2 datatype,
field3 datatype
)character set 字符集 collate 校对规则
field:指定列名 datatype:指定列类型
MySQL常用数据类型
eg:创建一个员工表
use mydb2; 首先进入库再创建表
create table employee
(
id int,
name varchar(40),
sex varchar(4),
birthday date,
entry_date date,
job varchar(40),
salary decimal(8,2),
resume text
);
查看表
show tables; 查看库的所有表
show create table employee; 查看表的创建细节(打出创建代码)
desc employee; 看表结构
修改表
使用 ALTER TABLE 语句追加, 修改, 或删除列的语法
追加
ALTER TABLE table ADD column datatype [DEFAULT expr][,column datatype]...);
修改
ALTER TABLE table MODIFY column datatype [DEFAULTexpr][,column datatype]...);
修改表的名称:Renametable 表名 to 新表名
修改表的字符集:alter table student character set 字符集;
修改列名:alter table user change column 原列名 新列名 新列名类型;
删除
ALTER TABLE table DROP(column);
eg:1、在上面员工表的基本上增加一个image列。
alter table employee add imageblob;
2、修改job列,使其长度为60。
alter table employee modify jobvarchar(60);
3、删除sex列
alter table employee drop sex;
4、删除表
drop table user;
5、表名改为user。
rename table employee to user;
6、修改表的字符集为utf-8
alter table user character setutf8;
7、列名name修改为username
alter table user change columnname username varchar(40);
语句
Insert语句
INSERT INTO table [(column[, column...])]VALUES(value [, value...]);
注:插入的数据应与字段的数据类型相同。数据的大小应在列的规定范围内,例如:不能将一个长度为80 的字符串加入到长度为40的列中。在values中列出的数据位置必须与被加入的列的排列位置相对应。 字符和日期型数据应包含在单引号中。插入空值,不指定或insert into table value(null)
eg:使用insert语句向表中插入员工的信息。
insert into employee (id,username,birthday,entry_date,job,salary,resume)
values('1','aaa','1980-09-09','1980-09-09','bbb','90','aaaaa');
注:类型建议必须,虽然可以不写,但是为了后期维护要写,值中为了不错,全部加上单引号。
插入中文数据的乱码问题
show variables like 'chara%'; 导出所有编码
set character_set_client=gb2312; 把客户端编码表设为gb2312
insert intoemployee(id,username) values('3','张三'); 这样插入张三就行了
要想查看时不乱码
setcharacter_set_results=gb2312; 把取出结果的编码表设为gb2312
select * from employee; 查看就不会乱码了
注:以上设置只对当前命令行窗口有效,关掉就不行了,可以在mysqL中的my.ini配置文件中改, 但是一定不要改,改了程序就又问题了。
Update语句
UPDATE 表名 SET 列名=值 [,多个 ...] [WHERE where_definition]
eg:1、将所有员工薪水修改为5000元。
update employee set salary=5000;
2、将姓名为’bbb’的员工薪水修改为3000元。
update employee set salary=3000where username='bbb';
3、将姓名为’bbb的员工薪水修改为4000元,job改为ccc。
update employee setsalary=4000,job='ccc' where username='bbb';
4、将bbb的薪水在原有基础上增加1000元。
update employee set salary=salary+1000where username='bbb';
注:要修改数据建议先写上where条件,否则就将所有表中的数据全改了。
Delete语句
delete from tbl_name [WHERE where_definition]
注:如果不使用where子句,将删除表中所有数据。Delete语句不能删除某一列的值(可使用update 使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。同insert和 update一样,从一个表中删除记录将引起其它表的参照完整性问题,在修改数据库数据时,头脑中应 该始终不要忘记这个潜在的问题。删除表中数据也可使用TRUNCATE TABLE 语句,它和delete有 所不同,TRUNCATE TABLE语句为摧毁整个表后重建表结构,而delete是一条一条的删。
eg:1、删除表中名称为’zs’的记录。
delete from employee whereusername='bbb';
2、删除表中所有记录。
delete from employee;
3、使用truncate删除表中记录。
truncate table employee;
Select语句
1 在select语句中可使用表达式对查询的列进行运算
SELECT *|{column1|expression, column2|expression,..} FROM table;
eg:1、查询表中所有学生的信息。
select * from student;
2、查询表中所有学生的姓名和对应的英语成绩。
select name,english fromstudent;
3、过滤表中重复的英语数据。
select distinctenglish from student;
4、在所有学生总分上加10分特长分。
select name,(chinese+english+math)+10from student;
5、统计每个学生的总分。
selectname,(chinese+english+math) from student;
2在select语句中可使用as语句
SELECT column as 别名 from 表名;
eg:1、使用别名表示学生分数。
select name as 姓名,(chinese+english+math)+10as 总分 from student;as可加可不加
2、查询姓名为wu的学生成绩
select * from student wherename='王五';
3、查询英语成绩大于90分的同学
select * from student whereenglish>'90';
4、查询总分大于200分的所有同学
select name from student where(chinese+english+math)>200;
3在where子句中经常使用的运算符
Like语句中,% 代表零个或多个任意字符,_ 代表一个字符
eg:1、查询英语分数在 80-90之间的同学。
写法一:select name from student where english>80 andenglish<90;
写法二:select name from student where english between 80 and 90;
2、查询数学分数为89,90,91的同学。
select * from student where mathin(89,90,91);
3、查询所有姓李的学生成绩。
select * from student where namelike '李%';
select * from student where namelike '李_';
4、查询数学分>80,语文分>80的同学。
select * from student wheremath>80 and chinese>80;
4使用order by 子句排序查询结果。
SELECT column1, column2. column3.. FROM table order by column asc|desc;
注:Order by 指定排序的列,排序的列即可是表中的列名,也可以是select 语句后指定的列名。Asc 升序、Desc 降序,默认为升序,ORDER BY 子句应位于SELECT语句的结尾。
eg:1、对总分排序后输出,然后再按从高到低的顺序输出
select name 姓名,(chinese+english+math)总分 from student orderby (chinese+english+math)desc;
select name 姓名,(chinese+english+math)总分 from student orderby 总分 desc;
2、对姓李的学生成绩排序输出
select * from student where name like '李%' order by (chinese+english+math) desc;
合计函数-count
Count(列名)返回某一列,行的总数
Select count(*)|count(列名) from tablename [WHERE where_definition]
eg:1、统计一个班级共有多少学生?
select count(name) from student;
select count(*) from student;
2、统计数学成绩大于90的学生有多少个?
select count(*) from studentwhere math>80;
3、统计总分大于250的人数有多少?
select count(*) from studentwhere (chinese+english+math)>250;
注:关于 count的函数的细节(count只统有值的行)
合计函数-SUM
Sum函数返回满足where条件的行的和
Select sum(列名)[,sum(列名)…] fromtablename [WHERE where_definition]
eg : 1、统计一个班级数学总成绩?
select sum(math) from student;
2、统计一个班级语文、英语、数学各科的总成绩
select sum(chinese),sum(english),sum(math)from student;
3、统计一个班级语文、英语、数学的成绩总和
select sum(chinese+english+math)from student;
4、统计一个班级语文成绩平均分
select sum(chinese)/count(*)from student;
合计函数-AVG
AVG函数返回满足where条件的一列的平均值
Select sum(列名) from tablename [WHERE where_definition]
eg:1、统计一个班级语文成绩平均分
select avg(chinese) fromstudent;
2、求一个班级总分平均分
select avg(chinese+math+english)from student;
合计函数-MAX/MIN
Max/min函数返回满足where条件的一列的最大/最小值
Select Max/min(列名) from tablename [WHERE where_definition]
eg:求班级最高分和最低分
selectmax(chinese+math+english),min(chinese+math+english) from student;
5使用group by 子句对列进行分组
SELECT column1, column2. column3.. FROM table group by column;
eg:对订单表中商品归类后,显示每一类商品的总价
select product,sum(price) fromorders group by product;
6使用having 子句过滤
Having和where均可实现过滤,但在having可以使用合计函数,having通常跟在group by后, 它作用于组。
SELECT column1, column2.column3.. FROM tablegroup by column having ... ;
eg:查询购买了几类商品,并且每类总价大于100的商品
select product from orders groupby product having sum(price)>100;
时间日期相关函数
字符串相关函数
数学相关函数
- sql 入门
- SQL 入门
- SQL入门
- SQL 入门
- SQL入门
- SQL入门
- SQL入门
- SQL入门
- SQL入门
- SQL入门
- SQL入门
- sql入门
- sql入门
- Sql入门
- SQL入门
- SQL入门
- SQL 入门
- SQL入门
- 自我介绍
- c语言指针详解
- Ubuntu更新出现 The system is running in low-graphics mode解决方法
- sqlite 句柄-sqlite 基础教程(3)
- LightOJ 1140 How Many Zeroes?
- SQL 入门
- vim显示行号、语法高亮、自动缩进的设置
- 使用Maven+Svn+Hudson持续集成开发流程实例【搭建二】
- uva10154 - Weights and Measure(经典动归)
- DB2错误信息SQLCODE SQLSTATE (按sqlcode排序)
- service的用法总结(一)
- 使用CImage类 显示图片
- 算法练习
- 好看的xshell配色