SQL基本操作

乱码

cmd窗口汉字显示乱码,一般
set names gbk就好用了

数据类型

varchar(size)可变大小的字符串
date格式yyyy-mm-dd
time格式08:22:10
datetime就是date+time

数据库相关操作
  • 创建数据库 并指定数据库中数据的编码
create databse mybase character set utf8;
  • 查看数据库
show database;
  • 创建数据库
create databse mybase;
  • 查看数据库创建信息
show cretate database mybase;
  • 删除数据库
drop database mybase;
  • 使用某个数据库
use databse;
  • 查看正在使用哪个数据库
use database;
表结构相关操作
  • 创建表
create table student(
    id int primary key,
    name varchar(20)
);
  • 添加一个主键
alter table student add primary key(id); 
  • 删除主键
alter table sort drop primary key;
  • 查看表
show tables;
  • 查看表结构
desc student;
  • 删除表
drop table student;
  • 修改列数据类型
alter table student modify chinese int;
  • 修改原列名到新名
alter table student change name newname varchar(20);
  • 删除某列
alter table student drop name;
  • 修改表名字
rename table oldname to newname;
  • 修改表的字符集
alter table student character set gbk;
插入表记录

除了数值类型外,其它的字段类型的值必须使用引号引起。
如果要插入空值,可以不写字段,或者插入 null。
对于自动增长的列在操作时,直接插入null值即可

insert into 表 (列名1,列名2,列名3..) values  (值1,值2,值3..); -- 向表中插入某些列
insert into 表 values (值1,值2,值3..); --向表中插入所有列
更新表记录
update 表名 set 字段名=值,字段名=值;
update 表名 set 字段名=值,字段名=值 where 条件;
删除表中数据
delete from 表名 [where 条件];
查询别名显示as

这里的别名,并没有修改数据库中的保存列名,只是显示不同了。类似于一份拷贝

select Sname as '姓名' from S;
select Sname as '姓名' from S where '姓名'='AAA';//这就是错的
select name math+chinese as sum where sum >200;//这个就是对的
条件查询
image.png
一些例子
  • 添加2列信息,出生日期,籍贯。
alter table student add birthday date,add nationality varchar(20);
  • 将语文成绩修改为默认值为0
alter table student alter column chinese drop default;
alter table student alter column chinese set default 0;
  • 查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列
select * from S order by depaNum,Age desc;
练习一
create table student(
    id int,
    name varchar(20),
    chinese float,
    english float,
    math float
);
在命令行中,name 列最好能插入中文值
1,请添加一个主键。
alter table student add primary key(id);  
2. 请添加2列信息,出生日期,籍贯。
alter table student add birthday date,add nationality varchar(20);
3,请修改语文成绩的数据类型为int型.
alter table student modify chinese int;
4. 请将各科成绩修改为默认值为0
alter table student alter column chinese drop default;
alter table student alter column chinese set default 0;

alter table student alter column english drop default;
alter table student alter column english set default 0;

alter table student alter column math drop default;
alter table student alter column math set default 0;
5. 请在里面插入10名学生数据。(成绩可以随便插入,不过最好有一个不同的分布)
insert into student values (1,'王一',90,80,70,'1992-02-12','北京');
insert into student values (2,'田一',91,80,70,'1992-02-12','上海');
insert into student values (3,'李三',92,80,70,'1992-02-12','山东');
insert into student values (4,'李二',40,89,92,'1992-02-12','湖北');
insert into student values (5,'李一',20,83,70,'1992-02-12','北京');
insert into student values (6,'赵三',70,80,70,'1992-02-12','北京');
insert into student values (7,'赵二',30,80,80,'1992-02-12','广东');
insert into student values (8,'赵一',90,80,40,'1992-02-12','北京');
insert into student values (9,'王三',99,80,92,'1992-02-12','北京');
insert into student values (10,'王二',90,81,70,'1992-02-12','北京');

6. 请分别找出单科成绩最高的学生名单。(降序即可)
select name from student order by chinese desc;
select name from student order by math desc;
select name from student order by english desc;
7. 请找出总成绩最高的学生。(降序即可)
select name from student order by chinese+math+english desc;
10.假设10名同学中有同姓的,如王,请找出姓王同学的信息.
select * from student where name like '王%';
12.请找出有任何一科不及格学生的名称
select * from student where chinese <60 or math<60 or english <60;
13.请找出两科成绩在90分以上的学生名称。
select * from student where chinese >90 and math>90 or english >90 and math>90 or chinese>90 and english>90;
14.请找出没有一科挂科的学生名称。
select name from student where math>60 and english >60 and chinese >60;
15.请找出所有非北上广省份的学生.
select * from student where nationality not in('北京','上海','广东');
练习二
新建一个学生表S,有包含如下信息
学号 Sno,
学生姓名 Sname,
性别 Sex,
年龄 Age,
专业 Depa

。
(请设置主键约束)
并插入10条数据。

专业包含(信息系、数学系,计算机科学系 等)
学号格式为 200501 200502 ... 200510

create table S(
Sno int primary key,
Sname varchar(10), 
Sex   char(5),
Age  smallint,
Depa varchar(10),
Birthday date,
depaNum int
);

insert into S values(200501,'侯希白','男',20,'信息系','1990-01-02',1);
insert into S values(200502,'坦坦翁','男',90,'数学系','1890-02-02',3);
insert into S values(200503,'纳兰右慈','男',40,'计算机科学系','1990-05-02',2);
insert into S values(200504,'元本溪','男',50,'经管系','1970-11-22',6);
insert into S values(200505,'棋待诏','男',35,'电子科学','1990-7-05',4);
insert into S values(200506,'贾嘉佳','女',18,'体育系','1390-01-02',5);
insert into S values(200507,'李当心','男',43,'佛学系','1590-01-02',7);
insert into S values(200508,'叶白夔','男',20,'军工系','1930-01-02',8);
insert into S values(200509,'陈芝报','男',28,'信息系','1995-01-02',1);
insert into S values(2005010,'轩辕青峰','女',25,'会计系','1992-03-15',9);
然后做如下查询:


1.         查询全体学生的学号与姓名。
    select Sno,Sname from S;

2.         查询全体学生的姓名、学号、所在系。
    select Sno,Sname,Depa from S;

3.         查询全体学生的详细记录。
    select * from S;
4.         查全体学生的姓名及其出生年份。
    select Sname,Birthday from S;
5.         查询全体学生的姓名、出生年份和所有系 使用列别名改变查询结果的列标题
    select Sname as '姓名',Birthday as '出生年份',Depa  as '所在系' from S;
7.         查询所有年龄在20岁以下的学生姓名及其年龄。
    select Sname,Age from S where Age < 20;
8.         查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。
    select Sname,Depa,Age from S between 20 and 23;
9.         查询年龄不在20~23岁之间的学生姓名、系别和年龄。
    select Sname,Depa,Age from S where Age not  between 20 and 23;
10.     查询信息系、数学系和计算机系学生的姓名和性别。
    select Sname,Sex from S where Depa in('信息系','数学系','计算机科学系');
11.     查询既不是信息系、数学系,也不是计算机科学系的学生的姓名和性别。
    select Sname,Sex from S where Depa not in('信息系','数学系','计算机科学系');
12.     查询学号为200501的学生的详细情况。
    select * from S where Sno = 200501;
13.     查询所有姓刘学生的姓名、学号和性别。
    select Sname,Sno,Sex from S where Sname like '刘%';
14.     查询姓“李”且全名为3个汉字的学生的姓名。
    select Sname from S where Sname like '李__';
15.     查询名字中第2个字为“本"字的学生的姓名和学号。
    select Sname,Sno from S where Sname like '_本_';
16.     查询所有不姓刘的学生姓名。
    select Sname from S where Sname not like '刘%';
17.     查询学号在200501~200509之间的学生姓名。
    select Sname from S where Sno between 200501 and 200509;
20.     查询计算机系年龄在20岁以下的学生姓名。
    select Sname from S where Depa='计算机科学系' and Age<20;
22.     查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。
    select * from S order by depaNum,Age desc;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容