//把数据库导出到脚本文件
mysqldump -uroot -p1234 --databases abc > d:/a/abc.sql //--databases是需要两个--
Where子句:
条件查询:
通过is null判断是否为null。(要区分空字符串与null的区别)
CREATE TABLE stud(
id INT PRIMARY KEY,
NAME VARCHAR(32) NOT NULL,
score NUMERIC(4,1)
);
//把所有名字都设成"Mike"了
UPDATE stud SET NAME="Mike"
//只设置分数>=70的记录的Name
UPDATE stud SET NAME="Exc" WHERE score>=70
//同时修改多个字段(下面两种方式都可。字段值即使不是字符类型,也可以加引号---注意,字符类型的值必须加引号。因此为安全考虑,最好所有的值都加引号--单引号和又引号都可以)
UPDATE stud SET NAME="笨蛋",id=5 WHERE score<60
UPDATE stud SET NAME="笨蛋",id='5' WHERE score<60
※where子句的句型
Select 字段列表 From 表名 where 条件 and 条件 or 条件
Update table tableName set .. Where 条件
Delete from tableName where ….
//查询分数在[60,80]之间的学生
SELECT * FROM stud WHERE score>=60 AND score<=80;
SELECT NAME,score FROM stud WHERE score BETWEEN 60 AND 80; //between子句是包含边界的
//查询分类正好是65和85的学生
SELECT * FROM stud WHERE score=65 OR score=85;
SELECT * FROM stud WHERE score IN(65,85); //in子句中的值是离散的
//模糊查询: like 参数: %(任意匹配) _(匹配单字符)
SELECT * FROM stud WHERE NAME LIKE '王%'; //姓王的学生
SELECT * FROM stud WHERE NAME LIKE '王_'; //姓王且名为单字的学生
SELECT * FROM stud WHERE NAME LIKE '王__'; //姓王且名为双字的学生
SELECT * FROM stud WHERE NAME LIKE '%王%';//姓名中包含"王"的学生
//查询某字段值为空
SELECT * FROM stud WHERE score IS NULL; //注意,不能用"="号
视图view:
//视图View ---对视图的操作能够时时更新到物理表,只是操作范围只针对视图中的进行(效率更高)
CREATE VIEW studV AS SELECT * FROM stud WHERE score<60;
SELECT NAME FROM studV;
UPDATE studV SET score = score*1.1; //该句执行后: 1)如果分数及格则studV视图中不再包含该数据 2)物理表stud中的数据也更改了。
使用聚合函数:
//聚合函数
SELECT COUNT(*) AS num FROM stud; //统计表中数据的行数
SELECT COUNT(score) AS num FROM stud; //统计score列中非NULL数据行的数量 SELECT AVG(score) AS avgg FROM stud;//统计分数的平均值(不包含score值为null的记录)
SELECT AVG(score) AS avgg FROM stud WHERE score IS NOT NULL;
SELECT ROUND(AVG(score)) AS avgg FROM stud;//四舍五入,取整
SELECT ROUND(AVG(score),2) AS avgg FROM stud;//四舍五入,保留两位小数
SELECT SUM(score) AS avgg FROM stud;//求和
SELECT MAX(score) AS avgg FROM stud; //最大值(最高分)
//查询出最高分学生的信息
SELECT * FROM stud WHERE score = (SELECT MAX(score) AS avgg FROM stud );
SELECT * FROM stud WHERE score IN( SELECT MAX(score) AS avgg FROM stud );
//查询有哪些年龄段的学生(显示有哪些年龄值,即年龄值相同的只显示一个)---以后的显示有哪些专业、哪些部门 都用distinct
SELECT DISTINCT age FROM stud;
SELECT DISTINCT age FROM stud ORDER BY age ASC; //升序
SELECT DISTINCT age FROM stud ORDER BY age DESC; //降序
//反模式--以下语句要么显示所有记录,要么一条也不显示。因为EXISTS()返回的是同一个结果
SELECT * FROM stud WHERE EXISTS( SELECT * FROM stud WHERE age=25 );
使用group by对数据进行分组:
//句型: group by... having... ---把各年龄段学生的平均分显示出来
SELECT AVG(score) 平均分, age FROM stud GROUP BY age;
SELECT AVG(score) 平均分, age FROM stud GROUP BY age HAVING age>20;
SELECT AVG(score) 平均分, age FROM stud GROUP BY age HAVING AVG(score)>=70;
//字符串处理函数
Length(str) - 求字符串长度
Ltrim(str) - 去掉左边的空格
Rtrim(str) - 去掉右边的空格
Left(str,n); - 从左边取出n个字符
Right(str,n); - 从右边取出n个字符
Substring(str,begin,len) -返回子串, begin的序号从1开始 ※
Reverse(str) –返回颠倒的字符串
Lower(str) - 转成小写
Upper(str) - 转成大写
Concat(Str,str…..)串联字符串。
Instr(str,s) – 返回s在str中出面的位置,没有则返回0
SELECT * FROM stud WHERE LENGTH(NAME)>3;
SELECT * FROM stud WHERE LENGTH(LTRIM(NAME))>3;
SELECT SUBSTRING(NAME,1,2) FROM stud;
SELECT * FROM stud WHERE SUBSTRING(NAME,1,1)='王';//显示姓王的学生