Structured Query Language 结构化查询语言
作用:与数据库进行交互
知识扩展:
SQL标准,由ANSI(美国标准学会,属于ISO的核心成员)进行管理和维护的。
数据库厂商都支持该标准,并进行了扩展。扩展的部分,一般称之为方言。
SQL标准和方言:普通话和方言。
1、Oracle
2、DB2
3、MySQL
4、SQL Server
验证是否安装成功:
登录数据库:
shell>mysql -u root -p
User类对应User表结构
User对象对应User表中的一条记录
*DDL:Data Definition Language数据定义语言
*DML:Data Manipulation Language 数据操作语言
DCL:Data Control Language 数据控制语言
*DQL:Data Query Language 数据查询语言
*TPL:事务处理语言
创建一个名称为mydb1的数据库。
mysql>CREATE DATABASE mydb1; (字符集采用数据库默认的--安装时的那个)
查看数据库的创建细节
mysql>SHOW CREATE DATABASE mydb1;
查看当前所有的数据库
mysql>SHOW DATABASES;
创建一个使用gbk字符集的mydb2数据库。
mysql>CREATE DATABASE mydb2 CHARACTERSET gbk;
创建一个使用utf8字符集,并带校对规则的mydb3数据库。
mysql>CREATE DATABASE mydb3 CHARACTERSET utf8 COLLATE utf8_general_ci;
查看当前数据库服务器中的所有数据库
mysql>SHOW DATABASES;
查看前面创建的mydb2数据库的定义信息
mysql>SHOW CREATE DATABASE mydb2;
删除前面创建的mydb1数据库
mysql>DROP DATABASE mydb1;
查看服务器中的数据库,并把mydb2的字符集修改为utf8;
mysql>ALTER DATABASE mydb2 CHARACTER SETutf8;
#数据库的操作
#创建数据库
create database mydb ;
#查看创建数据库的语句
show create database mydb ;
#改变当前的数据库
use mydb ;
#删除数据库
drop database mydb ;
#查看所有的数据库
show databases ;
#修改数据库mydb1的字符集为utf8
alter database mydb1 character set utf8 ;
#了解
#创建数据库mydb1,字符集用gbk
create database mydb1 character set gbk ;
#查看数据库中所有的校对规则
show collation ;
#查看中文的校验规则
show collation like '%gb%' ;
#创建数据库mydb2,字符集用gbk,校验规则用gbk_bin
create database mydb2 character set gbk collate gbk_bin ;
#-----
创建表之前要先选择数据库。
选择数据库
mysql>USE mydb2;
创建一个员工表
mysql>CREATE TABLE employee(
id int,
name varchar(100),
gende rvarchar(10),
birthday date,
entry_datedate,
job varchar(100),
salary float(8,2),
resume text
);
查看当前数据库中的所有表
mysql>SHOW TABLES;
查看表的创建细节
mysql>SHOW CREATE TABLE employee;
在上面员工表的基本上增加一个image列。
mysql>ALTER TABLE employee ADD imageblob;
修改job列,使其长度为60。
mysql>ALTER TABLE employee MODIFYjob varchar(60);
删除image列。
mysql>ALTER TABLE employee DROP image;
表名改为user。
mysql>RENAME TABLE employee TO user;
修改表的字符集为gbk
mysql>ALTER TABLE user CHARACTER SETgbk;
列名name修改为username
mysql>ALTER TABLE user CHANGEname username varchar(100);
#针对表的操作
#创建表t
create table t(
id int ,
name varchar(30)
) ;
#查看创建表的源码
show create table t ;
#创建表t1,使用字符集gbk
create table t1(
id int ,
name varchar(30)
)character set gbk ;
#创建表t4
create table t4
(
id int ,
name varchar(30),
optime timestamp
) ;
作用:操作的是表中的记录(数据)
关键字:INSERT UPDATE DELETE
#插入数据
#设置客户端的字符集为gbk
set character_set_client=gbk;
#设置结果集的字符集为gbk
set character_set_results=gbk ;
insert into t4(id,name) values(1,'张无忌') ;
insert t4(id,name) values(2,'乔峰') ;
#省略字段,意味着所有的字段都必须给值(自增例外)
insert t4 values(3,'杨过','2014-4-3') ;
#更新
#将表t4的第三条记录姓名字段改为杨康
update t4 set name='杨康' where id = 3 ;
#将所有记录的名字都改为东方不败
update t4 set name = '东方不败' ;
#修改多个字段
update t4 set id=6,name='萧峰' where id = 2 ;
#删除
delete from t4 where id = 4 ;
#删除所有的记录
delete from t4 ;
#删除所有的记录
truncate table t4 ;
#给表t4增加一个字段address
alter table t4 add address varchar(100) ;
#删除字段address
alter table t4 drop column address ;
#查看表的结构
desc t4 ;
MySQL:
字符串类型 使用单引号引起来 ‘abcdefg’
日期时间 使用单引号引起来 ‘2001-01-08’
特殊值 null
作用:查询
关键字:SELECT
简单查询:查询表中所有学生的信息。
mysql>SELECT * FROM student;
查询表中所有学生的姓名和对应的英语成绩。
mysql>SELECT name,english FROMstudent;
过滤表中重复数据。
msyql>SELECT DISTINCT english FROMstudent;
在所有学生数学分数上加10分特长分。
mysql>SELECT name,math+10 FROM student;
统计每个学生的总分。
mysql>SELECT name,chinese+english+mathFROM student;
使用别名表示学生分数。
mysql>SELECT name AS 姓名,chinese+english+math 总分 FROM student;
查询姓名为王五的学生成绩
msyql>SELECT * FROM student WHERE name='王五';
查询英语成绩大于90分的同学
mysql>SELECT * FROM student WHEREenglish>90;
查询总分大于200分的所有同学
mysql>SELECT * FROM student WHERE(chinese+english+math)>200;
查询英语分数在 80-90之间的同学。
mysql>SELECT * FROM student WHEREenglish BETWEEN 80 AND 90;
查询数学分数为89,90,91的同学。
mysql>SELECT * FROM student WHERE mathIN (89,90,91);
查询所有姓李的学生成绩。
mysql>SELECT * FROM student WHERE nameLIKE ‘李%’;
查询数学分>80,语文分>80的同学。
mysql>SELECT * FROM student WHEREmath>80 AND chinese>80;
对数学成绩排序后输出。
mysql>SELECT name,math FROM studentORDER BY math;
对总分排序后输出,然后再按从高到低的顺序输出
mysql>SELECT name,chinese+english+mathFROM student ORDER BY chinese+english+math DESC;
对姓李的学生语文成绩排序输出(由高到低)
msyql>SELECT name,chinese FROM studentWHERE name LIKE ‘李%’ ORDER BYchinese DESC;
#创建一个学生表
create table stu
(
id int primary key, #主键约束
name varchar(30) unique, #唯一约束
sex char(2) not null, #非空约束
age int check (age > 0 and age < 100), #检查约束
address varchar(50) default '北京' #默认约束
) ;
insert into stu values(1,'张无忌','男',20,'北京') ;
insert into stu values(2,'小龙女','女',18,'古墓') ;
insert into stu values(3,'黄蓉','女',15,'桃花岛') ;
insert into stu values(4,'韦小宝','男',24,'扬州') ;
insert into stu values(5,'乔峰','男',34,'雁门关') ;
insert into stu values(6,'张果老','男',30,'雁门关') ;
insert into stu values(7,'老张','男',38,'黒木崖') ;
insert into stu values(8,'张','男',34,'桃花岛') ;
insert into stu values(9,'韦小宝','女',24,'新东方') ;
insert into stu(id,name,sex,age) values(10,'令狐冲','男',27) ;
#查看所有数据
select * from stu ;
#查看小龙女的信息
select * from stu where id = 2 ;
select * from stu where name='小龙女' ;
#查看年龄在20~30之间的人
select * from stu where age >=20 and age <=30 ;
select * from stu where age between 20 and 30 ; # 包括20和30
#查看所有的的姓名
select name from stu ;
#查看所有的的姓名,年龄,性别
select name,age,sex from stu ;
#模糊查询
select * from 表名 where 字段名 like 字段表达式
% 表示任意字符数
_ 表示任意的一个字符
[] 表示在某个区间
#查询所有以张开头的人
select * from stu where name like '张%' ;
#查询姓名中含有张这个字的人
select * from stu where name like '%张%' ;
#查询姓名中含有张这个字的人并且姓名的长度是3个字的人
select * from stu where name like '张__' or name like '_张_' or name like '__张' ;
#查询表中有几种性别
select distinct sex from stu ;
#查找姓名和性别整体都不同的记录
select distinct name,sex from stu ;
#创建新表分数表
create table score
(
id int primary key,
sid int ,
china int,
english int ,
history int,
constraint sid_FK foreign key(sid) references stu(id)
) ;
insert into score values(1,1,68,54,81) ;
insert into score values(2,3,89,98,90) ;
insert into score values(3,4,25,60,38) ;
insert into score values(4,6,70,75,59) ;
insert into score values(5,8,60,65,80) ;
#字段可以有表达式
select id,china+10,english,history from score ;
#给字段起别名
select id as 编号,china as 语文,english as 英语,history as 历史 from score ;
select id 编号,china 语文,english 英语,history 历史 from score ;
#查看所有人考试的总分是多少
select id,china + english + history 总分 from score ;
#查看总分大于200的人
select * from score where china + english + history > 200 ;
#查询家在桃花岛或者黒木崖的人
select * from stu where address = '桃花岛' or address = '黒木崖' ;
select * from stu where address in('桃花岛','黒木崖') ;
#查询没有参加考试的人
select id ,name from stu where id not in(select sid from score) ;
#查询没有地址的人
select * from stu where address = null ; #错误的
select * from stu where address is null ;
#查询有地址的人
select * from stu where address is not null ;
#排序(order by )
#对考试的人的语文升序排列
select * from score order by china asc;
#对考试的人的历史降序排列
select * from score order by history desc;
#根据多个字段进行排序(语文升序,对语文成绩一样的人再进行历史降序类排)
select * from score order by china asc,history desc;
#根据考试总分降序进行排序
select *,china + english + history 总分 from score order by china + english + history desc ;