SQL 学习笔记快速回顾:
第一部分:入门基础
修改sql中文乱码问题:
第一语句设置:show variables;
执行:set character_set_client=gb2312;
执行:set character_set_results=gb2312;(关掉客户端就会恢复默认设置)
第二解决方案是改变sql配置文件来实现,但是一定要记得改回默认;(不建议使用)
找到安装目录下的my.ini文件,在文件下的 CLIENT SECTION下的
default-character-set=utf8改为你想要的编码就可以了;
1:明确库与表的关系
一般是一个应用创建一个库,一个库包括多个表;
2:创建数据库的语法: CREATE DATABASE [IF NOT EXSTS] db_name CHARASTER SET ***
CHARACTER SET:指定数据库采用的字符集
3:显示库的信息
SHOW DATABASES;
4:显示数据库创建信息
SHOW CREATE DATABASE 库名;
5:数据库删除语句:
DROP DATABASE 库名;
6:修改数据库,不能修改库名;
修改语法:alter database db_name;
7:数据备份的语法:MYSQLDUMP -u用户名 —p密码 数据库名>位置\名字.jsp;
8:数据恢复语法有三种:
1:如果你是删除了库的,那么你就的想到恢复到那个库中,以及
围绕这个思想,如果删除库,那么你就创建库:CREATE DATABASE DB_NAME;
然后再恢复
SOURS 文件名.sql
windows命令:mysql -u用户名 -p密码 数据地点;
改动脚本文件,及备份的文件,即加入mysql -uroot -proot <c:\1.sql语句即可;
9:创建表语法:注意事项,一定要在创建表之前使用 ————————use 库;
CREATE TABLE table_name(
字段 类型 表的约束,
字段 类型 表的约束
);
10:关于数据类型;到时候查文档;
11:修改表;
ALTER TABLE table_name 语句;
ADD 追加
MODIFY 修改
DORP 删除
修改表的名字: RENAME TABLE 表名 TO 新表名;
修改字符集: ALTER TABLE 表名 character set 字符集;
练习:1:创建一个员工信息表
CREATE TABLE employee(
id int,
name varchar(20),
gender varchar(20),
birthday date,
entry_date date,
job varchar(40),
salary decimal(8,2),
resume text
);
2:在上面员工表的基本上增加一个image列
ALTER TABLE employee add image varchar(20);
3:再填充点内容;
insert into employee(id,name,job) values (1,"wode","nini") ;
4:修改job列,使其长度为60。(DESC 表名)作用是显示查看表的列;显示创建细节 SHOW CREATER TABLE 表名;
ALTER TABLE MODIFY JOB VARCHAR(60);
5:删除gender列。
ALTER TABLE EMPLOYEE DROP gender;
6:修改表的字符集为utf-8
ALTER TABLE EMPLOYEE CHARATER SET UTF8;
7:列名name修改为username
ALTER TABLE EMPLOYEE TO USERNAME;
-------------查看表中数据:select * from 表名;
第二部分:CDUR
insert语句----------------增加数据;
语法:insert into table_name( ) values( ); -----
插入的数据应与字段的数据类型相同。
数据的大小应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。
在values中列出的数据位置必须与被加入的列的排列位置相对应。
字符和日期型数据应包含在单引号中。
插入空值,不指定或insert into table value(null)
UPDATE语句-----------------更新语句;
语法:UPDATE TABLE_NAME
SET
WHERE
UPDATE语法可以用新值更新原有表行中的各列。
SET子句指示要修改哪些列和要给予哪些值。
WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。
使用 update语句修改表中数据;
实现例子:在employee表中修改表中的纪录;
1:将所有员工薪水修改为5000元。
UPDATE EMPLOYEE
SET salary=5000;
2:将姓名为’HJJ’的员工薪水修改为3000元。
UPDATE EMPLOYEE
SET salary=3000
WHERE NAME='HJJ';
3:将姓名为’aaa’的员工薪水修改为4000元,job改为ccc。
UPDATE EMPLOYEE
SET salary=4000 ,job='ccc'
WHERE NAME='HJJ';
4:将hjj的薪水在原有基础上增加1000元。
UPDATE EMPLOYEE
SET salary=salary+1000
WHERE NAME='HJJ';
DELETE语句-----------------删除数据;
语法:DELETE FROM TABLE_NAME
WHERE ,,,
如果不使用where子句,将删除表中所有数据。
Delete语句不能删除某一列的值(可使用update)
使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。
同insert和update一样,从一个表中删除记录将引起其它表的参照完整性问题,在修改数据库数据时,头脑中应该始终不要忘记这个潜在的问题。
删除表中数据也可使用TRUNCATE TABLE 语句,它和delete有所不同,参看mysql文档。
SELECT语句-----------------查询数据;
一:语法:普通查询 select [distinct] *|{column1, column2. column3..}
from table;
Select 指定查询哪些列的数据。
column指定列名。
*号代表查询所有列。
From指定查询哪张表。
DISTINCT可选,指显示结果时,是否剔除重复数据
例子:
1:查询表中所有学生的信息。
select *from 表名;
2:查询表中所有学生的姓名和对应的英语成绩。
3:过滤表中重复数据。
采用distinct;
二:语法:使用表达式进行运算;
SELECT *{COLUMN1}
FROM TABLE;
使用AS语句取别名;SELECT COLUMN AS 别名 FROM 表名;
三:语法:使用WHERE子句;
> < <= >= = <> 大于、小于、大于(小于)等于、不等于
BETWEEN ...AND... 显示在某一区间的值
比较运算符 IN(set) 显示在in列表中的值,例:in(100,200)//或
LIKE ‘张pattern’ 模糊查询
IS NULL 判断是否为空
and 多个条件同时成立
逻辑运算符 or 多个条件任一成立
not 不成立,例:where not(salary>100);
Like语句中,% 代表零个或多个任意字符,
_ 代表一个字符,例first_name like ‘_a%’;
四:语法:使用order by子句排序查询;
ASC升序、DESC 降序;
跟着from后面 (不是where后面哦!!没有where)
SELECT COLUMN1,FROM ,,,
ORDER BY COLUMN1;
合计函数:Count(*);
求和函数:Sum函数返回满足where条件的行的和
求平均函数:AVG函数返回满足where条件的一列的平均值
合计函数:Max/min函数返回满足where条件的一列的最大/最小值
五:使用GROUP BY
六:使用having 子句过滤
练习:
创建数据库:
create table student(
id int,
name varchar(20),
chinese float,
english float,
math float
);
insert into student(id,name,chinese,english,math) values(1,'张小明',89,78,90);
insert into student(id,name,chinese,english,math) values(2,'李进',67,98,56);
insert into student(id,name,chinese,english,math) values(3,'王五',87,78,77);
insert into student(id,name,chinese,english,math) values(4,'李一',88,98,90);
insert into student(id,name,chinese,english,math) values(5,'李来财',82,84,67);
insert into student(id,name,chinese,english,math) values(6,'张进宝',55,85,45);
insert into student(id,name,chinese,english,math) values(7,'黄蓉',75,65,30);
1:求一个班级数学平均分?
SELECT AVG(MATH) AS 数学班级平均分 from student;
2:求一个班级总分平均分
SELECT AVG(CHINESE+english+math) FROM STUDENT;
3:统计一个班级数学总成绩?
SELECT SUM(MATH)数学总成绩 from student;
4:统计一个班级共有多少学生?
SELECT count(*)from student;
5:查询总分大于200分的所有同学,并输出总分
SELECT * ,(CHINESE+english+math) AS 总分 FROM STUDENT where (CHINESE+english+math)>200 ;
6:查询英语分数在 80-90之间的同学。
select name,english from student where english between 80 and 90;
select name ,english from student where english>80 and english<90;
7:查询数学分数为80,90,96的同学。
select name,math from student where math in(80,90,96);
8:对数学成绩排序后输出。
select name,math from student order by math desc;
9:求班级最高分和最低分由高到低
select max(CHINESE+english+math) AS 最高分 from student;
第三部分:数据库表约束;这才是重点,记忆单词-------------------------------------
1;定义唯一约束
创建表,实现唯一约束,unique
Create table people(
id int primary key ,//主键约束
name varchar(20) not null//不准许为空
);
2:删除主键:alter table table_name drop primary key;
3: auto_increment//删除的情况不阻止自动增长,,,--------------------------记住单词
4;定义外键约束:constraint ordersid_FK foreign key(ordersid) references orders(id),
ordersid_FK:外键名称
实例:创建丈夫和妻子的两个表;
CREATE TABLE husband(
id int primary key auto_increment,
name varchar(20)
);
CREATE TABLE wife(
id int primary key auto_increment,
name varchar(20),
husband_id int,
constraint husband_FK foreign key(husband_id) references husband(id) on delete cascade
);
set null的时候不能干掉表,可以删除元素
-----------------------------------------一对一--------------------------------------------
create table person
(
id int primary key,
name varchar(40)
);
create table idcard
(
id int primary key,
address varchar(40),
constraint id_FK foreign key(id) references person(id)
);
-----------------------------------------自关联---------------------------------------------
create table person1
(
id int primary key,
name varchar(40),
parent_id int,
constraint id_FK1 foreign key(id) references person1(id)
);