赞
踩
SQL 全名是结构化查询语言(Structured Query Language),是用于数据库中的标准数据查 询语言,
IBM 公司最早使用在其开发的数据库系统中。1986 年10 月,美国 ANSI 对 SQL 进行规范后,以此
作为关系式数据库管理系统的标准语言 (ANSI X3. 135- 1986),1987 年 得到国际标准组织的支持下
成为国际标准。不过各种通行的数据库系统在其实践过程中都 对 SQL 规范作了某些编改和扩充。
所以,实际上不同数据库系统之间的SQL 语言不能完 全相互通用。
DML 语句(数据操作语言)Insert、Update 、 Delete 、
DDL 语句(数据定义语言)Create、Alter 、 Drop、Truncate
DCL 语句(数据控制语言)Grant、Revoke 事务控制语句Commit 、Rollback、Savepoint
1.登录数据库
mysql -u root -p
2.查看所有的数据库
show databases;
+--------------------+
| Database |
+--------------------+
| information_schema | -- mysql元数据,基础数据
| mysql | -- mysql配置数据库,其中包含用户信息。(用户名和密码,权限管理)
| performance_schema | -- mysql数据库软件的运行数据,日志信息,性能数据
| test | -- 测试数据库。空的
+--------------------+
4 rows in set (0.00 sec)
以上四个库是mysql的基础数据库,存储着mysql的基础数据,如变量等等。
3.显示数据库语句:
SHOW DATABASES 只是显示数据库的名字
4.显示数据库创建语句:
SHOW CREATE DATABASE db_name
5.数据库删除语句:
DROP DATABASE [IF EXISTS] db_name
6.创建数据库
create database day15; -- 指定默认字符集创建数据库
-> default character set utf8
-> ;
Query OK, 1 row affected (0.00 sec)
7.删除数据库
drop database day15;
8.查看数据库默认的字符集
show create database day15;
9.修改数据库默认的字符集
alter database day15 default character set gbk;
7.进入数据库
use day15;
+++ 查看数据库中所有的表
show tables;
+++ 查看一张表的表结构
desc student;
+++ 创建表
create table student(
sid int,
sname varchar(20),
sage int
);
+++ 删除表
drop table day15;
+++ 修改表 1)添加字段 alter table student add column sgender varchar(2); 2)删除字段 alter table student drop column sgender; 3)修改字段类型 alter table student modify column remark varchar(100); 4)修改字段名称 alter table student change column sgender gender varchar(2); 5)修改表名称 alter table student rename to teacher;
++++ 增加数据 1)插入所有字段 INSERT INTO student VALUES(1,'张三','男',20); 必须依次插入所有字段对应的数据,一个都不能少,一个都不能乱 2)插入部分字段 INSERT INTO student(id,NAME) VALUES(2,'李四'); ++++ 修改数据 1)修改所有数据(建议少用) UPDATE student SET gender='女'; 2)带条件的修改(推荐使用) UPDATE student SET gender='男' WHERE id=1; -- 修改id为1的学生,修改性别为男 3)修改多个字段,注意: SET 字段名=值,字段名=值,.... UPDATE student SET gender='男',age=30,name='小三' WHERE id=2; ++++ 删除数据 1)删除所有数据 方式一: delete from student; 方式二: truncate table student; 2)带条件的删除(推荐使用) DELETE FROM student WHERE id=2;
delete from stu 和 truncate table stu 的区别?
删除表中所有数据有两种方式, 一种是 delete from stu ; 另一种是 truncate table stu; delete from stu 和 truncate table stu 的区别? -- delete from: 可以全表删除 1.可以带条件删除 delete from table where id=1; 2.只能删除表的数据,不能删除表的约束 例子:如果表中的数据id为自增的,此时id为11。 这时使用 delete from stu 删除全表。 再次新增数据时,id为12;(删除全表,没有影响自增长约束) 3.使用delete from删除的数据可以回滚(事务) -- truncate table: 可以全表删除 1.不能带条件删除 truncate table emp where id=1; (这种写法错误) 2.即可以删除表的数据,也可以删除表的约束 例子:如果表中的数据id为自增的,此时id为11。 这时使用 truncate table stu 删除全表。 再次新增数据时,自增长约束重置,id则重新计数,id=1;(删除全表,影响自增长约束) 3.使用truncate table删除的数据不能回滚
delete from stu | truncate table stu | |
---|---|---|
全表删除 | 可以 | 可以 |
带条件删除 | 可以 | 不可以 |
删除约束 | 不可以 | 可以 |
可以回滚 | 可以 | 不可以 |
1.查询所有列 SELECT * FROM student; 2.查询指定列 SELECT id,NAME,gender FROM student; 3.查询时添加常量列 -- 需求: 在查询student表时添加一个班级列,内容为“java就业班” SELECT id,NAME,gender,age,'java就业班' AS '年级' FROM student; 4.查询时合并列 -- 需求: 查询每个学生的servlet和jsp的总成绩 SELECT id,NAME,(servlet+jsp) AS '总成绩' FROM student; -- 需求: 查询每个学生的servlet和jsp的总成绩大于100的人 SELECT * FROM student where (servlet+jsp) >100 ; 注意:1)合并列通常用于合并两个数值的总和。 2)合并列只能合并数值类型的字段,不能合并非数值类型的字段。 5.查询时去除重复记录(DISTINCT) -- 需求: 查询学生的性别 男 女 方式一: SELECT DISTINCT gender FROM student; 方式二: SELECT DISTINCT(gender) FROM student; 注意: SELECT DISTINCT sex ,age FROM student; 只有当sex,age两列都重复时,才被视为重复列。
6.条件查询(where) 1)逻辑条件:and(与) or(或) not a.需求: 查询id为2,且姓名为李四的学生 SELECT * FROM student WHERE id=2 AND NAME='李四'; -- 交集 b. 需求: 查询id为2,或姓名为张三的学生 SELECT * FROM student WHERE id=2 OR NAME='张三'; -- 并集 c:需求 :查询成绩不大于200的学生 SELECT * FROM student where not(score>200); 2)比较条件: > < >= <= = <>(不等于) between and (等价于>= 且 <=) a.需求: 查询servlet成绩大于70分的学生 SELECT * FROM student WHERE servlet>70; b.需求: 查询jsp成绩大于等于75,且小于等于90分的学生 方式一: SELECT * FROM student WHERE jsp>=75 AND jsp<=90; 方式二: SELECT * FROM student WHERE jsp BETWEEN 75 AND 90; -- (包前包后) c. SELECT * FROM student WHERE gender<>'男'; 注意: BETWEEN 75 AND 90; 包前包后。 75<= x <=90 3) 判空条件(null 空字符串): is null / is not null / ='' / <>'' a.需求: 查询地址为空的学生(包括null和空字符串) -- 判断null SELECT * FROM student WHERE address IS NULL ; -- 判断空字符串 SELECT * FROM student WHERE address=''; SELECT * FROM student WHERE address IS NULL OR address=''; -- (包括null和空字符串) b.需求: 查询有地址的学生(不包括null和空字符串) SELECT * FROM student WHERE address IS NOT NULL AND address<>''; 4)模糊条件: like a.通常使用以下替换标记: -- % : 表示任意个字符 -- _ : 表示一个字符 -- 需求: 查询姓‘张’的学生 SELECT * FROM student WHERE NAME LIKE '李%'; -- 需求: 查询姓‘李’,且姓名只有两个字的学生 SELECT * FROM student WHERE NAME LIKE '李_'; 5) IN 显示在in列表中的值,例:in(100,200)
例子: CREATE TABLE student(id INT ,NAME VARCHAR(20),chinese FLOAT,english FLOAT,math FLOAT); INSERT INTO student VALUES(1,'李红',98,34.2,84); INSERT INTO student VALUES(2,'白红',91,36.2,67); INSERT INTO student VALUES(3,'王帅',96,34.2,34); INSERT INTO student VALUES(4,'白鹭',94,56,34); INSERT INTO student VALUES(5,'螽斯',92,90.2,5); --查询所有的学生 SELECT * FROM student ; --查询表中所有学生的姓名和英语成绩 SELECT id ,NAME ,english FROM student; --查询英语成绩大于等于90分的同学 SELECT id ,NAME ,(chinese+math+english ) AS '总分' FROM student; --查询总分大于200分的学生 SELECT * FROM student WHERE (chinese+math+english )>200 --查询所有姓白的学生 SELECT * FROM student WHERE NAME LIKE '白%'; --查询英语>50 或者总分 >200 的学生 SELECT * FROM student WHERE english >50 OR (chinese+math+english )>200; -- 统计每个学生的总分 SELECT id,NAME ,(chinese+math+english ) AS '总分' FROM student -- 在每个学生的总分上再加上10分的特长分。 SELECT id,NAME ,(chinese+math+english +10) AS '总分' FROM student
7.聚合查询 常用的聚合函数: sum() avg() max() min() count() -- 需求:查询学生的servlet的总成绩 (sum() :求和函数) SELECT SUM(servlet) AS 'servlet的总成绩' FROM student; -- 需求: 查询学生的servlet的平均分 SELECT AVG(servlet) AS 'servlet的平均分' FROM student; -- 需求: 查询当前servlet最高分 SELECT MAX(servlet) AS '最高分' FROM student; -- 需求: 查询最低分 SELECT MIN(servlet) AS '最低分' FROM student; -- 需求: 统计当前有多少学生(count(字段)) SELECT COUNT(*) FROM student; SELECT COUNT(id) FROM student; 注意:1.count()函数统计的数量不包含null的数据 count(*) 统计表中每一列的数据有多少个,然后取最大值 count(age) 统计age列的数据有多少个。 所以从理论上来说,count(age)的效率要高于count(*) 使用count(列)统计表的记录数,要使用不包含null值的字段
8 分页查询(limit 起始行,查询几行) SELECT * FROM student limit 起始行,查询几行; 起始行从0开始 分页查询当前页的数据的sql SELECT * FROM student LIMIT (当前页-1)*每页显示多少条,每页显示多少条; -- 需求: 查询第1,2条记录(第1页的数据) SELECT * FROM student LIMIT 0,2; -- 查询第3,4条记录(第2页的数据) SELECT * FROM student LIMIT 2,2; -- 查询第5,6条记录(第3页的数据) SELECT * FROM student LIMIT 4,2; -- 查询第7,8条记录 (没有记录不显示) SELECT * FROM student LIMIT 6,2;
9.查询排序 语法 :order by 字段 asc/desc asc: 顺序,正序。数值:递增,字母:自然顺序(a-z) desc: 倒序,反序。数值:递减,字母:自然反序(z-a) 1)单个字段排序 -- 默认情况下,按照插入记录顺序排序 SELECT * FROM student; -- 需求: 按照id顺序排序 SELECT * FROM student ORDER BY id ASC; SELECT * FROM student ORDER BY id; -- 默认正序 SELECT * FROM student ORDER BY id DESC;-- 反序 2)多个字段排序 -- 需求: 按照servlet正序,按照jsp的倒序 SELECT * FROM student ORDER BY servlet ASC,jsp DESC;
10 分组查询(group by)
-- 需求: 查询男女的人数
-- 预期结果:
-- 男 3
--- 女 2
-- 1) 把学生按照性别分组(GROUP BY gender)
-- 2) 统计每组的人数(COUNT(*))
SELECT gender,COUNT(*) FROM student GROUP BY gender;
11 分组查询后筛选
-- 需求: 查询总人数大于2的性别
-- 1) 查询男女的人数
-- 2)筛选出人数大于2的记录(having)
--- 注意: 分组之前条件使用where关键字,分组之前条件使用having关键字
SELECT gender,COUNT(*) FROM student WHERE GROUP BY gender HAVING COUNT(*)>2;
基础运算: 查询时做基础运算 SELECT chinese + english FROM student SELECT chinese / english FROM student SELECT chinese * english FROM student 修改时做基础运算 UPDATE student SET chinese=chinese+english UPDATE student SET chinese=chinese/english UPDATE student SET chinese=chinese*10 注意: 1.基础运算时,两列数据类型必须都为数字类型。 2.基础运算时,如果有一列数据为null,则结果为null eg:chinese english chinese+english 10 null null 20 30 50 null 30 null 30 0 30
mysql有六处使用了字符集,分别为:client 、connection、database、results、server 、 system。 client是客户端使用的字符集。 connection是连接数据库的字符集设置类型,如果程序没有指明连接数据库使用的字符集类型 就按照服务器端默认的字符集设置。 database是数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安 装时指定的字符集设置。 results是数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符 集。 server是服务器安装时指定的默认字符集设定。 system是数据库系统使用的字符集设定。 MySql乱码管理,查看和修改数据库字符集: show variables like 'character%'; set character_set_results=gbk; set character_set_client=gbk;
创建数据库
CREATE DATABASE IF NOT EXISTS zero;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。