1、SQL

  结构化查询语言,语法简单、功能强大、使用灵活,主要用于关系型数据库中

  SQL语言不区分大小写;

  SQL语言结尾必加


2、Mysql数据库(Red Hat 7版本)

  开启/关闭服务器都需要使用root用户;

  开启Mysql服务器:systemctl start mariadb

  关闭Mysql服务器:


  连接数据库和退出数据库最好使用普通用户:

SQL基础_第1张图片


3、数据库的操作(针对Mysql)

  (1)、创建数据库:create database test;

  创建utf-8(支持中文的)数据库 :create database test character set utf8;(此时下面数据库中就可对中文进行支持);

  (2)、查看数据库:show databases;

  显示创建数据库的信息:show create database test;

  (3)、修改数据库:alter database test character set utf8;

  不能修改数据库的名字;

  (4)、删除数据库:drop database test;


4、对表的操作

  SQL中的数据类型(主要针对Mysql):

数值型
说明
bit
位(可以指定一位)
int
整型
double/float
浮点数
字符型
说明
char(n)
不可变字符,n是多少就申请多少空间
varchar(n)
可变字符,根据实际情况申请空间大小
text
大文本、大字符串
时间型
说明
date
日期,如:'1995-10-10'
time
时间,如:'12.23.34'
datetime
日期时间,如:'1995-10-10 12.23.34'
timeStamp
时间戳,自动赋值为当前日期时间

  创建表之前,必须说明使用的是哪个数据库:use test;

  创建表:create table student(id int, name varchar(20));  //括号中的为表的字段;

  (1)、表中增加元素:

  insert into student(id, name) values(3, 'maxi');

  (2)、删除一张表:drop table student;

  删除表中的数据:delete from student where id = 1;(将id为1的这一行数据将删除)

  (3)、修改一张表:

  修改表名字:rename table student to worker;

  增加一个字段:alter table student add column height double;

  修改一个字段:alter table student modify column height float;

  删除一个字段:alter table student drop column height;

  修改表的字符集:alter table student character set gbk;

  修改表中的元素:update student set id = id + 1;  //给每个学生的id都加了1;

  update student set id = 2 where name = 'maxi';

  (4)、查看表:show tables;

  查看指定表的属性:desc student;

  查看表的字段信息:select * from student;   //也可查看某个字段的信息,对*做做文章即可;


5、select语句

具体的select操作如下图:





SQL基础_第2张图片

wKioL1gUFJbyCSPjAAAk1AtkpoM413.png-wh_50

下面的一样:

查询分数范围内的成绩:

  select * from student where english>90;

  select * from student where english+chinese+math>250;

查询英语分数在 85-95之间的同学:

  select * from student where english>=85 and english<=95;

  select * from student where english between 85 and 95;

查询数学分数为84,90,91的同学:

  select * from student where math=84 or math=90 or math=91;

  select * from student where math in(84,90,91);

查询所有姓马的学生成绩:

select * from student where name like '马%'  (like和=在这里是等价的);

%:代表任意长度(长度可以是0)的字符串;

_:代表任意单个字符;

distinct:出现的话,用来消除重复的行;

like:查找指定的与字符串匹配的元组;

escape'\':换码字符,其后出现的\之后不再具有通配符的含义;

查询数学分>85,语文分>90的同学:

  select * from student where math>85 and chinese>90;

排序:order by <列名>  asc(升序)  desc(降序)

对数学成绩排序升序(默认为升序)输出:

SQL基础_第3张图片

对总分排序后输出,然后再按从高到低的顺序输出:

统计一个班级共有多少学生?

  select count(*) from student;

统计数学成绩大于90的学生有多少个?

  select count(*) from student where math>90;

统计总分大于250的人数有多少?

  select count(*) from student where math+chinese+english>250;

统计一个班级数学总成绩?

  select sum(math) from student;

统计一个班级语文、英语、数学各科的总成绩?

  select sum(math), sum(chinese), sum(english) from student;

统计一个班级语文、英语、数学的成绩总和?

  select sum(math+chinese+english)from student;

  select sum(math)+sum(chinese)+sum(english) from student;

求一个班级数学平均分?

  select avg(math) from student;

求一个班级总分平均分?

  select avg(math+chinese+english) from student;

  select avg(math)+avg(chinese)+avg(english) from student;

求班级最高分和最低分?

  select max(math+chinese+english),min(math+chinese+english) from student;

基于空值的查询:

  空值(NULL)在数据库中有特殊含义,它表示不确定的值;为空的判断只能用 is NULL / is not NULL;


6、学生表分组(group by)

  select *(根据查询的情况) from student group by <列>;

  group by:将查询到的结果按指定的列进行分组,即将指定列相同的元组为同一个组;

  思想(这是一个经典案例):

  (1)、的加一列,alter table student add classid int;

  (2)、在根据id进行分组:update student set classid = 1 where id between 1 and 3;

  update student set classid = 2 where id between 4 and 6;

此时的情况为:


上面根据classid就已经分为了2个班了;

  (3)、在根据classid进行分班,和求其班级平均分:

select classid 班级编号, avg(chinese+english+math) 班级平均分 from student group by classid;

总结:在分组上,Mysql做的不是很好,一个人可以代表一个组;

:select name, classid 班级编号, avg(chinese+english+math) 班级平均分 from student group by classid;

 

7、时间、日期相关函数

  (1)、查询日期、时间:select now() from dual;

select date_add(now(), interval -1 day) 昨天, now() 今天, date_add(now(), interval +1 day) 明天;

结果:

select date_add(now(), interval -1 year) 去年, now() 今年, date_add(now(), interval +1 year) 明年;

结果:



8、多表查询

  举个简单例子:有student和work2张表;

select student.* work.* from student, work while student.year = work.year;


9、mysql的备份

  备份数据库:mysqldump -u root -p test > 1.sql

如下图:

  数据库恢复:mysqldump -u root -p test < 1.sql