复试华工--SQL语句

1 数据库连接

1.1首先要打开SQL Server Browser——在重启SQL Server(MSSQLSERVER)——使TCP/IP协议启动成功。
去下面链接下载jar包,我的jdk是1.8的,所以下载sqljdbc42.jar的包。
下载jar包
然后进入eclipse界面,找到的当前工程文件,点击右键,选中properties->Java Build Path->Libraries->add external jars->找到我们刚刚下载到的sqljdbc42.jar类库,添加即可。
注意需要把数据库的身份验证改为SQL Server和Windows身份验证模式,同时修改sa管理员的密码。再点击“状态”下的“已启用”
右击数据库——点击“权限”——点击“查看服务器权限”——点击“安全性”,修改身份验证模式。
1.2
在对象资源管理器中的“安全性”下找到登录名sa,右击修改密码,再点击“状态”,使“登录”下选择已启用
1.3

2 数据库连接代码

public class DBUtil {
    static String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    static String user = "数据库用户"; //我这里是sa超级管理员
    static String password = "密码";
    static String url = "jdbc:sqlserver://localhost:1433;database=数据库名称";
    static {
        try {
            Class.forName(driverName);
            System.out.println("获取驱动成功");
        } catch (ClassNotFoundException e) {
            // TODO: handle exception
            e.printStackTrace();
            System.out.println("获取驱动失败");
        }
    }
    public static Connection getConnection() {
        Connection conn = null;
        try {
            conn = DriverManager.getConnection(url, user, password);
            System.out.println("数据库连接成功");
        } catch (SQLException e) {
            // TODO: handle exception
            e.printStackTrace();
            System.out.println("数据库连接失败");
        }
        return conn;
    }
}

3 考试中数据库操作的SQL语句

3.1 统计大科室的病人人数

注:要想进行统计查询每个大科室的人数,单纯使用聚集函数难以表达,这种查询要进行分组,再应用聚集函数。带group by子句的select语句执行效果:首先对from子句中的表计算笛卡尔积,再根据where的条件得到查询的中间结果。然后,按照group by子句指定的一个或多个列对中间结果分组,在这些列上的值相等的元组分为一组;计算聚集函数。

select [Department].[DeptName], sum([Group].[Number])
from [Department], [Group]
where [Department].[DeptNo] = [Group].[DeptNo]
group by [Department].[DeptName]

3.2 统计每月的病人数目

select [Month], sum([Number]) as [Numbers]
from [Group]
group by [Month]

3.3 三个表查询

order by可以对记录进行有序输出,desc为降序输出,asc或者默认是升序输出
根据病人姓名模糊查询,[Patient].[PName] = '%输入字%'
%可以与零个或者多个字符进行匹配,_下划线只能与单个字符进行匹配

select [Department].[DeptName], [Group].[GroupName], [Patient].[PName]
from [Department], [Group], [Patient]
where [Department].[DeptNo] = [Group].[DeptNo] and [Group].[GroupNo] = [Patient].[GroupNo] and [Department].[DeptName] = '内科' and [Group].[GroupName] = '心内科'
order by [Department].[DeptName] desc, [Group].[GroupNo] ,[Patient].[PName] desc

3.4 增删改就不写了

3.5 显示最多病人人数和最小病人人数的记录

(要求找出最多病人人数和最少病人人数的记录,界面只显示找出的记录,而隐藏其他的记录)
这个比较难想一点,要用union并集,将两条记录并在一起

select *
from [Group]
where [Number] = (select max([Number]) from [Group])
union
select *
from [Group]
where [Number] = (select min([Number]) from [Group]);

4 还有个工具类Utils

public class StringUtil {
	public static boolean isEmpty(String str) {
		if(str == null || "".equals(str.trim())) {
			return true;
		}
		else {
			return false;
		}
	}
}

4.1 关于如何判断输入的字符串是否为数字

使用正则表达式

private boolean isNumeric(String str){ 
	    Pattern pattern = Pattern.compile("[0-9]*"); 
	    return pattern.matcher(str).matches();    
	} 

5 一些其他语句

5.1 向基本表增加新的列,删除已存在列

alter table [表名] add [列名] 类型 列约束
alter table [Score] add [Grade] int check([Grade]>=0 and [Grade]<=150)

alter table  [表名] drop [列名] {cascade|restrict}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值