发表于: 2019-10-20 20:08:05
2 950
今天完成的事情:
学习了SQL的基础语法以及一些高级语法
SELECT 获取表中的字段
SELECT column_name,column_name
FROM table_name;
SELECT * FROM table_name;
SELECT DISTINCT语句
dictinct意为确定的,用于筛选出一列里具有唯一不同的值
SELECT DISTINCT 列名称 FROM 表名称
WHERE有选择的筛选数据
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
运算符可以是
如:
SELECT * FROM Persons WHERE City='Beijing'
AND 和 OR 运算符 用于where中的多个条件
如
SELECT * FROM Persons WHERE FirstName='Thomas' AND
LastName='Carter'
ORDER BY 语句 用于对结果集进行排序
如
以字母顺序显示公司名称:
以逆字母顺序显示公司名称,并以数字顺序显示顺序号:
company相当于主关键字,ordernumber相当于次关键字
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
order by 默认升序 如果要降序 使用desc
INSERT INTO语句
INSERT INTO 语句可以有两种编写形式。
第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:(这种要把除了id列的列值全部输入)
VALUES (value1,value2,value3,...);
第二种形式需要指定列名及被插入的值:
VALUES (value1,value2,value3,...);
Update语句 用于更新表中已存在的记录
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
![]() | 请注意 SQL UPDATE 语句中的 WHERE 子句! WHERE 子句规定哪条记录或者哪些记录需要更新。如果您省略了 WHERE 子句,所有的记录都将被更新! |
---|
注:在 MySQL 中可以通过设置 sql_safe_updates 这个自带的参数来解决,当该参数开启的情况下,你必须在update 语句后携带 where 条件,否则就会报错。
set sql_safe_updates=1; 表示开启该参数
DELETE 语句 用于删除表中的行
WHERE some_column=some_value;
![]() | 请注意 SQL DELETE 语句中的 WHERE 子句! WHERE 子句规定哪条记录或者哪些记录需要删除。如果您省略了 WHERE 子句,所有的记录都将被删除! |
---|
删除所有数据
您可以在不删除表的情况下,删除表中所有的行。这意味着表结构、属性、索引将保持不变:
或
DELETE * FROM table_name;
DROP:
DROP test;
删除表test,并释放空间,将test删除的一干二净。
TRUNCATE:
TRUNCATE test;
删除表test里的内容,并释放空间,但不删除表的定义,表的结构还在。
DELETE:
1、删除指定数据
删除表test中年龄等于30的且国家为US的数据
DELETE FROM test WHERE age=30 AND country='US';
2、删除整个表
仅删除表test内的所有内容,保留表的定义,不释放空间。
DELETE FROM test 或者 DELETE FROM test;DELETE * FROM test 或者 DELETE * FROM test;
SELECT TOP 子句
SELECT TOP 子句用于规定要返回的记录的数目。
SELECT TOP 子句对于拥有数千条记录的大型表来说,是非常有用的。
注意:并非所有的数据库系统都支持 SELECT TOP 语句。 MySQL 支持 LIMIT 语句来选取指定的条数数据, Oracle 可以使用 ROWNUM 来选取。
SQL Server / MS Access 语法
FROM table_name;
MySQL 语法
FROM table_name
LIMIT number;
在 Microsoft SQL Server 中还可以使用百分比作为参数。
下面的 SQL 语句从 websites 表中选取前面百分之 50 的记录:
实例
以下操作在 Microsoft SQL Server 数据库中可执行。
变相返回后 N 行:
--前5行select top 5 * from table--后5行select top 5 * from table order by id desc --desc 表示降序排列 asc 表示升序
LIKE 操作符 LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式
使用 SQL [charlist] 通配符
MySQL 中使用 REGEXP 或 NOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式。
FROM table_name
WHERE column_name LIKE pattern;
注:
'%a' //以a结尾的数据
'a%' //以a开头的数据
'%a%' //含有a的数据
‘_a_’ //三位且中间字母是a的
'_a' //两位且结尾字母是a的
'a_' //两位且开头字母是a的
============================
描述:复杂过滤,模糊匹配 like 函数
ABCMI123 LIKE %MI%ABC123MI LIKE %MI——MI结尾MIABC123 LIKE MI%——MI开头
% 代表任意多个字符(可以是 0 个),_ 代表一个字符,__ 代表两个字符。
SMITH LIKE 'S_I%'——匹配'SITH' LIKE 'S_I%'——不匹配'SMITH' LIKE 'S__T%'——匹配
实例:列出姓名中含 MI 这 2 个字母的员工
select *from empwhere ename like '%MI%';
SQL通配符 https://www.runoob.com/sql/sql-wildcards.html
首先说下LIKE命令都涉及到的通配符:
% 替代一个或多个字符
_ 仅替代一个字符
[charlist] 字符列中的任何单一字符
[^charlist]或者[!charlist] 不在字符列中的任何单一字符
其中搭配以上通配符可以让LIKE命令实现多种技巧:
1、LIKE'Mc%' 将搜索以字母 Mc 开头的所有字符串(如 McBadden)。
2、LIKE'%inger' 将搜索以字母 inger 结尾的所有字符串(如 Ringer、Stringer)。
3、LIKE'%en%' 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、McBadden)。
4、LIKE'_heryl' 将搜索以字母 heryl 结尾的所有六个字母的名称(如 Cheryl、Sheryl)。
5、LIKE'[CK]ars[eo]n' 将搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。
6、LIKE'[M-Z]inger' 将搜索以字符串 inger 结尾、以从 M 到 Z 的任何单个字母开头的所有名称(如 Ringer)。
7、LIKE'M[^c]%' 将搜索以字母 M 开头,并且第二个字母不是 c 的所有名称(如MacFeather)。
正则表达式 - 语法 https://www.runoob.com/regexp/regexp-syntax.html 是一种字符串匹配模式标准 不同工具不一样
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
例如:
runoo+b,可以匹配 runoob、runooob、runoooooob 等,+ 号代表前面的字符必须至少出现一次(1次或多次)。
runoo*b,可以匹配 runob、runoob、runoooooob 等,* 号代表字符可以不出现,也可以出现一次或者多次(0次、或1次、或多次)。
colou?r 可以匹配 color 或者 colour,? 问号代表前面的字符最多只可以出现一次(0次、或1次)。
构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与运算符可以将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。
正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式。模式描述在搜索文本时要匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
其他师兄日志里看到的内容:
实体类
实体类就是一个拥有Set和Get方法的类。实体类通常总是和数据库之类的(所谓持久层数据)联系在一起。这种联系是借由框架(如Hibernate)来建立的。
一个表相当于一个类,一个记录相当于类的对象,一个字段相当于对象的属性
我们在操作某个表时(比如更改这个表的信息),我们就可以在前台定义一个这样的对象,然后将其对应的属性赋值,然后传到后台。
这样后台就可以拿到这个对象的所有值了——不用一个一个属性当参数传过来,只要传一个这个类的对象就好了,也就是说只要一个参数就好了。好处不言而喻。
而这种前台对象到后台数据库的联系,我们是借由框架、配置文件来配置实现的,很方便快捷。并不需要自己手动编程实现。
简而言之,(大多数情况下)实体类就是数据库在Java代码中对应的东西。
工具类
工具类其实就是对于String,Collection,IO等常用类的功能的扩展。比如IO读写文件。其实大多数时候我希望有一个文件路径,然后调个方法就直接得到文件内容(字符串或者字节数组形式)。
如果没有工具类,那么你每个读文件的地方都有一段重复的代码。所以,你肯定会被这个功能提取出来。那么,你提取出来放哪儿呀?要知道这个功能可是在任何类都能调用的。所以,我们就放在FileUtil里面了。
为什么要将方法和变量都写成静态的。因为,这些方法我只是想调用一下,不需要牵扯工具类中的任何属性和变量,所以,我就没有必要实例化了(new)。既然不需要实例化了,那么就用静态就行了。
接口
一个抽象类中的所有方法都是抽象的,就可以将这个类用另外一种方式来定义,也就是接口定义。
接口是抽象方法和常量值的定义的集合,从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现
可以使用extends来继承接口的常量和抽象方法,但它与类中的extends不同,它可以继承有多个父接口(多重继承),各父接口间用逗号隔开。
接口中的所有常量必须是public static final,方法必须是public abstract,这是系统默认的,不管你在定义接口时,写不写修饰符都是一样的
测试类
JAVA中的测试类是用来是用来对已经写好的功能组件进行测试的。
第一种:另外新建一个带有main方法的类,利用该类来调用需要测试的类,把需要测试的数据传入进去即可。比如:
需要测试的类是ScoreQuery(String stuNum, String subject);
public class TestCase{
public static void main(String[] args) {
ScoreQuery scoreQuery= new ScoreQuery("Tom", "150110101");
Map map = new HashMap();
map = scoreQuery.query();
System.out.println(map);
}
}
第二种方法就是创建测试的功能组件,每次实现该功能组件对其他组件进行测试。即测试类里面不写main方法,把它变为父类,里面创建一个new对象的方法,以后的测试类只要继承这个父类就行了
public class SimpleTestCase(){
Object object;
public staitc void prepare(){
Map map = new HashMap();
map.put("", "");
......
BeanUtils.map2Bean(map, object);
}
}
明天计划的事情:
把Java集合部分学习完
遇到的问题
收获
评论