SQL语句系列

1、SQL语句之行操作

2、SQL语句之表操作

3、SQL语句之数据库操作

4、SQL语句之用户管理



  关系型数据库的存储形式

  

  在关系型数据库中,数据都是以类似于Excel表格的形式存储(如下图),我们将“列名”称作“字段”,一条数据指一行存储的信息,对这一行的数据主要的操作有“增(insert)、删(delete)、改(update)、查(select)”。

  以上就是数据库中的一张表,一共5行,两个字段(nid、name),接下来要介绍如何再添加新的一行数据,如何删除、更改以及查询已有的数据。

  行操作——增

增加数据主要用到的语句是insert into…… values…… ,一共有三种插入的方式:

如果想跟着我一起操作,可先在自己的数据库中执行以下操作(复制命令执行即可,语句含义会在稍后讲解):

SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0; -- ----------------------------
-- Table structure for `test`
-- ----------------------------
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
`nid` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`nid`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of `test`
-- ----------------------------
BEGIN;
INSERT INTO `test` VALUES ('1', '小李'), ('2', '小花'), ('3', '小陈'), ('4', '小妞'), ('5', '小红');
COMMIT; -- ----------------------------
-- Table structure for `test2`
-- ----------------------------
DROP TABLE IF EXISTS `test2`;
CREATE TABLE `test2` (
`nid` int(11) NOT NULL AUTO_INCREMENT,
`age` int(11) NOT NULL,
PRIMARY KEY (`nid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of `test2`
-- ----------------------------
BEGIN;
INSERT INTO `test2` VALUES ('1', '22'), ('2', '34'), ('3', '45'), ('4', '23');
COMMIT; SET FOREIGN_KEY_CHECKS = 1;

(1)插入一行数据 (“--”后面跟注释,程序不会运行之后的内容)

insert into 表(字段名,字段名……) values (值,值……);   --SQL语句规定每条命令末尾必须加分号(;)

--如下图使用 :
insert into test(name) values ("新插入1");
  --该语句在test表中插入了一条“name”字段为“新插入1”的数据
  --至于为什么明明没有插入”nid“这个字段,但其却自动填充了6,这个后面会讲。
select * from test; --查看有没有插进去

(2)插入多行数据(values后面每条数据之间用逗号“,”隔开即可)

insert into 表(字段名,字段名……) values (值,值……),(值,值……),(值,值……),(值,值……),(值,值……)……;  

如下图使用
insert into test(name) values ("新插入2"), ("新插入3"), ("新插入4"), ("新插入5"), ("新插入6"), ("新插入7"), ("新插入8"); select * from test; --查看有没有插入成功

(3)从另外一个表中插入数据

insert into 表1(表1字段名,表1字段名……) select 表2字段名,表2字段名…… from 表2

 

  select……from……语句是查询语句,这里的意思是将从表2查询出的字段插入到表1中,例如,我可以用下面的语句将test中的所有数据再重新插入进test这个表中:

insert into test(name) select name from test;

select * from test;  --查看是否成功

  这个语句可能在你的电脑上实验的时候会遇到问题,造成问题的原因绝大多数可能是字段的数据类型不符合要求。例如,要将表2中的name列插入到表1中的age列中,由于name是varchar类型,而age是int类型,varchar类型无法转换成int类型,所以程序报错。

insert test2(age) select name from test;   --将test中的name插入到test2中的age

  但是如果将age列插入到name列中程序不会报错,因为int类型可以转换成varchar类型。

insert test(name) select age from test2;  --将test2中的age插入到test中的name

select * from test limit 26,5;  --只查看最后几条是否成功

  行操作——删

  删除命令比较简单,delete from 表,不过如果你运行以下语句,便会发现一个意外的结果

delete from test2;

select * from test2;   --查看是否删除成功

  发现test2中的数据被全部清空了,那如果我们需要单独删除某一行数据呢?这就需要用到条件语句,只删除满足条件的行:

  

delete from 表 where 字段名=XXX;
--删除某字段等于XXX的行 也可以删除大于、小于、不等于(>、< 、!=)XXX的行 delete from 表 where 字段名 in (XXX, CCC, VVV) ;
--删除某字段在(XXX, CCC, VVV)中的行,也可用 not in ( )删除不在里面的行
     --例如,删除test表中nid为1,3,5,7的行
   delete from test where nid in (1,3,5,7); delete from 表 where 字段名 between a and b;
--删除某字段位于a和b之间的行,当然也有 not between and;
--例如,删除test表中nid在16到32之间的行:
   delete from test where nid between 16 and 32; --记住,nid为16和32的行也会被删除 --另外 SQL语句用and、or、not分别表示且、或、非的关系,用以连接多个条件
--例如,我想删除test表中name为“小花”,且nid等于15的行:
delete from test where name ="小花" and nid=15; --运行以上例子的命令后,test里面的数据如下:

  行操作——改

  改的操作使用update  set 命令,和删除命令类似,也需要添加条件语句,不然会修改所有的行:

update 表 set 字段名 = “XXX”  where 条件语句;

     --例如,将test中nid大于11的行的name全部修改:
update test set name="修改的行" where nid>11; --结果如下

  行操作——查

  讲完以上内容再讲“查”就显得轻松很多了,查找的命令结构为 select   from ,后面也可跟where、order by、limit等语句。

  

  1、一般查找

select 字段名1,字段名2 from 表    --查找全部行
--例如:查找test表中的name和nid字段
select name,nid from test; -- 你会发现列的顺序和之前不一样了,name在前,这与你写的命令一致
select * from test; --也可用*来代替所有的列 select 字段名1,字段名2 from 表 where 条件语句 --查找满足条件的行
--例如:查找nid等于4的行
    select * from test where nid=4; select 字段名1,字段名2 from 表 limit 6; --表示只返回前6条结果
--例如:
select * from test where nid>4 limit 6 ; --limit 一般写在where后面 select 字段名1,字段名2 from 表 limit 2,4; --表示从第3条数据开始,返回后面的4条
--例如
select * from test limit 2,4; --暂时理解不了的可以对比不加limit的情况 select 字段名1,字段名2 from 表 order by 字段2; --按照字段2升序
--order by 字段2 asc (升序)(asc可以省略)
--order by 字段2 desc (降序)
--例如:
select * from test order by nid desc; --按照nid降序
--也可按照多个字段排序,例如,先按照name升序,再按照nid降序
select * from test order by name asc,nid desc ;

  查找命令的实验结果我就不一一贴图了。

  2、模糊查找

  

     --模糊查找 使用like语句这里只简单讲解通配符"_"和"%"的用法

select * from test where name like "小_";  --"_"表示任意一个字符,本语句表示查找name为两个字符且以“小”开头的行

select * from test where nid like "%2";     --“%”表示任意多个字符,这里表示只要以2结尾的nid,不管2前面有几个字符

  关于模糊查找的更多内容我会在之后的博文中整理出来,这里只先记住“_”和“%”的用法。不过千万别认为SQL中通配符的内容较少,果真要全部掌握的话,还是需要花不少精力。

  行操作——小结

  总的来说,“增删改查”是SQL语句中有关行的基本操作,我最初学数据库时,以为学了这么一大堆命令就足以应对需求了,可是现实压根不允许你停下学习的脚步。在之后的博文中,我会更进一步的讲解表操作。表操作不仅仅涉及单个表,而且涉及多个表的联表操作,这部分内容会很绕,然而却正是现实应用中需要掌握的核心内容。

  另外,在学习之初,为了不将各个命令混淆,建议大家学一个命令就要弄清楚它究竟是行级别还是表级别的操作,例如delete可以删除表内的所有行,truncate也可以,但是delete是“行”级别的操作,而truncate table是“表”级别的操作,所以delete无法使自增列(稍后会讲)重新回到1,但是truncate table命令却会使其重新回到1;这是因为delete是行级别操作,无法改变整个表的结构,而truncate table却可以改变。

  

  希望同志之人都能持之以恒,不负初心。

 

SQL语句之行操作的更多相关文章

  1. MySQL之唯一索引、外键的变种、SQL语句数据行操作补充

    0.唯一索引 unique对num进行唯一限制,表示num是独一无二的,uql是唯一索引名称 上面为联合索引:num和xx不能完全一样  1.外键的变种 a. 用户表和部门表 用户: 1 alex 1 ...

  2. SQL语句之数据库操作

    SQL语句系列 1.SQL语句之行操作 2.SQL语句之表操作 3.SQL语句之数据库操作 4.SQL语句之用户管理 占坑,带写……

  3. SQL语句之表操作

    SQL语句系列 1.SQL语句之行操作 2.SQL语句之表操作 3.SQL语句之数据库操作 4.SQL语句之用户管理 写在前面 在上一篇博文里面我整理了“行”级别的操作,分别是“增(insert).删 ...

  4. 【HANA系列】SAP HANA SQL合并多行操作

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA SQL合并多行 ...

  5. sql语句实现行转列的3种方法实例

    sql语句实现行转列的3种方法实例 一般在做数据统计的时候会用到行转列,假如要统计学生的成绩,数据库里查询出来的会是这样的,但这并不能达到想要的效果,所以要在查询的时候做一下处理,下面话不多说了,来一 ...

  6. mysql 使用Navicat Lite如何打开‘查询编辑器’,使用sql语句对表进行操作!

    今天第一次使用mysql,尽然连查询编辑器都找不到,研究了半天,询问了下大牛,才搞出来,准备写下来,后面方面忘记了有查找的地方,哈哈哈~~ 如何打开"查询编辑器",使用sql语句进 ...

  7. mysql sql语句:行转列问题

    存在表score,记录学生的考试成绩,如下图所示: 现要求以 学生姓名,语文,数学,英语 这种格式显示学生成绩,如下图所示 具体步骤如下: 1.首先,使用case when函数输出单个课程的成绩 ca ...

  8. Sql 语句收集——行转列

    SQL行转列汇总 PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in ...

  9. C# 直接使用sql语句对数据库操作 (cmd.ExecuteNonQuery)

    只介绍读和删 不管使用什么方法来对数据库进行操作都绕不开和数据库的连接问题,所以咱们先在App.config中添加连接字段 <connectionStrings> <add name ...

随机推荐

  1. 安卓 textview 换行 不满就换了

    public static String ToDBC(String input) { char[] c = input.toCharArray(); for (int i = 0; i < c. ...

  2. 配置环境是程序员的第一步 -- Windows 10 下 MySQL 安装

    MySQL 作为最典型的关系型数据库管理系统,由于其体积小.速度快.总体拥有成本低,尤其是其开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库.MySQL 社区版的功能也足够我们 ...

  3. Java中long和Long的区别

    Java的数据类型分两种: 1.基本类型:long,int,byte,float,double,char,short,boolean 2. 对象类型(类): Long,Integer,Byte,Flo ...

  4. codeforce 459DIV2 C题

    题意 一串括号字符串,里面存在一些‘?’,其中‘?’既可以当作 '(' 又可以当作 ')' ,计算有多少对(l,r),在s中[sl,s(l+1),s(l+2),.....sr],内的括号是匹配的.n= ...

  5. 刷题向》关于搜索+tarjan的奇怪组合题 BZOJ1194 (normal+)

    关于这道题,其实看懂了的话还是比较好写的,只是题目实在又臭又长,没有让人读下去的勇气. 给出题目翻译: 给你S张图, 每张图有M个点,其中M个点中有N个是特殊单位,会给出. 每个点又有0.1两条边指向 ...

  6. mfs实际操作教程

    9. 实际操作案例 9.1 默认的垃圾回收时间是86400,存在一种可能性是垃圾还没回收完,你的存储容量就暴掉了.(案例提供者shinelian) 方案1:设置垃圾回收时间,积极监控存储容量.     ...

  7. SpringBoot26 RestTemplate、WebClient

    1 RestTemplate RestTemplate是在客户端访问 Restful 服务的一个核心类:RestTemplate通过提供回调方法和允许配置信息转换器来实现个性化定制RestTempla ...

  8. /error处理

    1 BasicErrorController 1.1 简述 SpringMVC框架在出现错误时有一个默认的错误请求 /error:出现异常之后执行/error请求之前框架会判断出现异常的请求类型,然后 ...

  9. JavaPersistenceWithMyBatis3笔记-第5章Configuring MyBatis in a Spring applications-001

    一. 1.Mapper /** * */ package com.mybatis3.mappers; import java.util.List; import org.apache.ibatis.a ...

  10. 38.NOW() 函数

    NOW 函数返回当前的日期和时间. 提示:如果您在使用 Sql Server 数据库,请使用 getdate() 函数来获得当前的日期时间. SQL NOW() 语法 SELECT NOW() FRO ...