Skip to content

基本数据操作

基于SQL的常用关键字

  • 数据查询:SELECT、FROM、WHERE、DISTINCT、ALL、AND、OR、NOT、JOIN
  • 数据定义:CREATE、DROP、ALTER
  • 数据操作:INSERT、UODATE、DELETE
  • 数据控制:GRANT、REVORK
  • 数据运算:AS、ORDER BY、DESC、ASC、BETWEEN
  • 函数运算:AVG、MIN、MAX、SUM、COUNT、DISTINCT、GROUP BY、HAVING

基于数据库操作

1、创建数据库

html
CREATE DATABASE<数据库名>(<列名><数据类型>[CREATE_SPECIFICATION [, CREATE_SPECIFICATION] ...] 
          CREATE_SPECIFICATION:    
          [DEFAULT] CHARACTER SET CHARSET_NAME  |  [DEFAULT] COLLATE COLLATION_NAME;

DEMO:

html
~创建一个名称为mydb1的数据库。
create database mydb1;
~创建一个使用gbk字符集的mydb2数据库。
create database mydb2 character set gbk;
~创建一个使用utf8字符集,并带校对规则的mydb3数据库。
create database mydb3 character set utf-8 collate utf8_bin;

2、创建视图

html
CREAT VIEW 视图名 (列表名) AS SELECT 查询语句
      [WITH CHECK OPTION] ;//表示对UPDATE,INSERT,DELECT操作时保证更新、插入、删除行满足视图定义中的谓词条件

DEMO:

html
~创建一个名称为mydb1的视图。
create view mydb1 as select ProductID,ProductName from Products where Discontinued=No

3、查看数据库

html
显示数据库语句:
SHOW DATABASES
显示数据库创建语句:
SHOW CREATE DATABASE db_name

DEMO:

html
~查看当前数据库服务器中的所有数据库 
show databases;
~查看前面创建的mydb2数据库的定义信息
show create database mydb3;

4、修改数据库

html
    ALTER  DATABASE  <数据库名>  [alter_specification [, alter_specification] ...] 
        alter_specification:    
            [DEFAULT] CHARACTER SET charset_name | [DEFAULT] COLLATE collation_name

DEMO:

html
~查看服务器中的数据库,并把其中mydb2字符集修改为utf8
alter database mydb2 character set utf8;

5、删除数据库

html
DROP DATABASE <数据库名>

DEMO:

html
~删除前面创建的mydb1数据库 drop database mydb1;
drop DATABASE mydb1;

基于数据表操作

1、创建表

html
CREATE TABLE table_name
    (
        FIELD1  DATATYPE,
        FIELD2  DATATYPE,
        FIELD3  DATATYPE,
    )[CHARACTER SET 字符集] [COLLATE 校对规则]
FIELD:指定列名 DATATYPE:指定列类型

DEMO:

html
 ~创建一个员工表employee 
create table employee(
    id int primary key auto_increment,
    name varchar(20) unique,
    gender bit not null,
    birthday date,
    entry_date date,
    job varchar(40),
    salary double,
    resume text
);

2、查看表

html
查看表结构:DESC TABNAME
查看当前数据库中所有表:SHOW TABLES
查看当前数据库表建表语句 SHOW CREATE TABLE TABNAME;
查看表的相关信息:SHOW TABLE STATUS

DEMO:

html
~显示employee表的信息
show table status like 'employee' \G;

3、修改表

html
ALTER TABLE<>[ADD<新列名><数据类型>[完整性约束条件]][DROP<完整性约束条件>][MODIFY<列名><数据类型>];

DEMO:

html
~用于向表中增加新列及新列相关的完整性约束条件,新的列增加成功后不带任何数据
alert table student add Scome date;
~用于向表中增加新列及新列相关的完整性约束条件,新的列增加成功后不带任何数据
alert table student modify Sage smallint ; 
~用于修改原来的列定义,包括修改列名和数据类型,列数据类型修改后可能会丢失原有的数据
alert table student drop unique (Sname);

4、删除表

html
DROP TABLE <表名>

DEMO:

html
~删除前面创建的mydb1表;
drop TABLE mydb1;

5、创建索引

html
CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名> (<列名> [<次序][,<列名>[<次序]].....);

DEMO:

html
~给student表创建索引studentIndex
create unique index studentIndex on student (sno);

6、删除索引

html
DROP INDEX <索引名>;

DEMO:

html
~删除索引studentIndex
drop index studentIndex;

7、CRUD (1)SELECT

  • 普通查询
html
SELECT [DISTINCT] *|{(<列名> [, <列名>...])} FROM <表名>;

DEMO:

html
~查询表中所有学生的信息。
select * from exam;
~查询表中所有学生的姓名和对应的英语成绩。
select name,english from exam;
~过滤表中重复数据
select distinct english from exam;
~在所有学生分数上加10分特长分显示。
select name , math+10,english+10,chinese+10 from exam;
~统计每个学生的总分。
select name ,english+math+chinese from exam;
~使用别名表示学生总分。
select name as 姓名 ,english+math+chinese as 总成绩 from exam;
select name 姓名 ,english+math+chinese 总成绩 from exam;
select name english from exam;
  • WHERE DEMO:
html
~查询姓名为张飞的学生成绩
select * from exam where name='张飞';
~查询英语成绩大于90分的同学
select * from exam where english > 90;
~查询总分大于230分的所有同学
select name 姓名,math+english+chinese 总分 from exam where math+english+chinese>230;
~查询英语分数在 80-100之间的同学。
select * from exam where english between 80 and 100;
~查询数学分数为75,76,77的同学。
select * from exam where math in(75,76,77);
~查询所有姓张的学生成绩。
select * from exam where name like '张%';
select * from exam where name like '张__';
~查询数学分>70,语文分>80的同学。
select * from exam where math>70 and chinese>80;
  • ORDER BY
html
SELECT (<列名> [, <列名>...]) FROM <表名> WHERE... ORDER BY <列名> ASC|DESC;
默认为asc升序排列

DEMO:

html
~按照默认的语文成绩升序输出
select name,chinese from exam order by chinese desc;
~对总分排序按从高到低的顺序输出
select name 姓名,chinese+math+english 总成绩 from exam order by 总成绩 desc;

(2)INSERT

html
INSERT INTO <表名> [(<列名> [, <列名>...])] VALUES (<> [, <>...]);

DEMO:

html
~使用insert语句向表中插入三个员工的信息
insert into employee (id,name,gender,birthday,entry_date,job,salary,resume)values (null,'张飞',1,'1999-09-09','1999-10-01','打手',998.0,'老大的三弟,真的很能打');
insert into employee values (null,'关羽',1,'1998-08-08','1998-10-`这里写代码片`01','财神爷',9999999.00,'老大的二弟,公司挣钱都指着他了');
insert into employee values (null,'刘备',0,'1990-01-01','1991-01-01','ceo',100000.0,'公司的老大'),(null,'赵云',1,'2000-01-01','2001-01-01','保镖',1000.0,'老大贴身人');

(3)UPDATE

html
UPDATE <表名> SET <列名>=expr1 [, <列名>=expr2 ...] [WHERE <条件>];

DEMO:

html
~将所有员工薪水修改为5000元。
update employee set salary = 5000;
~将姓名为’张飞’的员工薪水修改为3000元。
update employee set salary = 3000 where name='张飞';
~将姓名为’关羽’的员工薪水修改为4000元,job改为ccc。
update employee set salary=4000,job='ccc' where name='关羽';
~将刘备的薪水在原有基础上增加1000元。  
update employee set salary=salary+1000 where name='刘备';

(4)DELETE

html
DELETE FROM <表名> [WHERE <条件>];

DEMO:

html
~删除表中名称为’张飞’的记录。
delete from employee where name='张飞';
~删除表中所有记录。
delete from employee;
~使用truncate删除表中记录。
truncate table employee;

参考文档

1、https://blog.csdn.net/Geekst/article/details/90298137

2、https://blog.csdn.net/wujingjing_crystal/article/details/52305738?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control